对于ggplot,我想在图例中添加左对齐的图例标题,该图例标题中包含多行和指数,以图例中值的单位表示。我正在绘制类似于以下形式的数据:
leakage_rates_levels <- c(5.4, 0.25)
leakage_rates <- as.factor(rep(leakage_rates_levels, 3)) # L/s-m^2 at 75 Pa
data_groups_levels <- c('Set 1', 'Set 2', 'Set 3')
data_groups <- as.factor(rep(data_groups_levels, each=2))
moisture_level <- c(7, 3, 11, 10, 16, 6)
plotdt <- data.frame(data_groups, leakage_rates, moisture_level)
我使用expression()
向图例中的单位添加指数。以下代码生成所需的图形,但图例标题文本的格式错误。
ggplot(plotdt, aes(data_groups)) +
geom_bar(aes(weight=moisture_level, fill=leakage_rates), position='dodge') +
labs(y='Moisture Level') +
labs(fill=expression(paste('Leakage Rate\nat 75 Pa\n(L/s-', m^2, ')', sep=''))) +
theme(panel.grid.major.x = element_blank(),
axis.title.x = element_blank())
图例标题显示为左对齐,但最后一行除外,其中最后一行中间有一堆多余的空格。
在legend_title_align=0
中使用legend_title=element_text(hjust=1)
(建议here)和/或theme()
无效。尝试添加phantom()
间距也不起作用(建议here)。 this question的最高答案的结尾指出了我遇到的相同问题,但未提出解决方案。
是否有办法使图例中的平方米项像其余文字一样向左对齐?
我正在使用ggplot 3.1.0和R 3.5.1。
答案 0 :(得分:4)
您可以使用上标2(U + 00B2)的unicode表示,并避免使用
expression()
和多行图例标题引起问题的组合:
ggplot(plotdt, aes(data_groups)) +
geom_bar(aes(weight=moisture_level, fill=leakage_rates), position='dodge') +
labs(y='Moisture Level') +
labs(fill=paste('Leakage Rate\nat 75 Pa\n(L/s-m\u00b2)', sep='')) +
theme(panel.grid.major.x = element_blank(),
axis.title.x = element_blank())
答案 1 :(得分:1)
您可以使用atop
使行彼此“顶”。
因为您有3行,并且atop
仅接受2个参数,所以您需要将2个atop
嵌套在一起。这使某些行上的字体变小。防止这种情况的方法是将表达式传递到textstyle
或displaystyle
:
ggplot(plotdt, aes(data_groups)) +
geom_bar(aes(weight = moisture_level, fill = leakage_rates), position = "dodge") +
labs(y = "Moisture Level") +
labs(fill = expression(atop(atop(textstyle("Leakage Rate"),
textstyle("at 75 Pa")),
"(L/s-" ~m^2~ ")"))) +
theme(panel.grid.major.x = element_blank(), axis.title.x = element_blank())