多行图例文本,包括带ggplot的指数

try*_*ink 6 r ggplot2

随着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)
Run Code Online (Sandbox Code Playgroud)

我用来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())
Run Code Online (Sandbox Code Playgroud)

除了最后一行之外,图例标题显示为左对齐,最后一行在其中间有一堆无关的空格.

三行图例文本,其中第三行表示单位,升每秒米的平方,但米的平方项被推到右边距,而所有其他文本左对齐,在第三行的中间留下一个大的空白区域.

使用legend_title_align=0(建议在这里)和/或legend_title=element_text(hjust=1)theme()没有任何效果.试图添加phantom()间距也没有用(这里建议).这个问题的最佳答案的结尾指出了我遇到的同样问题,但没有提出解决方案.

有没有办法让图例中的米平方项与文本的其余部分保持左对齐?

我正在使用ggplot 3.1.0和R 3.5.1.

Mr.*_*Zen 7

您可以使用上标二 (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())
Run Code Online (Sandbox Code Playgroud)

使用上标绘图