【问题标题】:Multi-line legend text including exponent with ggplot多行图例文本,包括带有 ggplot 的指数
【发布时间】:2018-11-18 19:30:18
【问题描述】:

使用 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())

除了最后一行,图例标题左对齐,中间有一堆多余的空格。

theme() 中使用legend_title_align=0(建议here)和/或legend_title=element_text(hjust=1) 无效。尝试添加phantom() 间距也不起作用(建议here)。 this question 的最佳答案的结尾指出了我遇到的相同问题,但没有提出解决方案。

有没有办法让图例中的米平方项像文本的其余部分一样左对齐?

我正在使用 ggplot 3.1.0 和 R 3.5.1。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    您可以使用上标二 (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())
    

    【讨论】:

      【解决方案2】:

      您可以使用atop 将线条“叠加”在一起。

      因为你有 3 行并且 atop 只接受 2 个参数,但是你需要有 2 个 atop 相互嵌套。这使得某些行上的字体更小。防止这种情况的方法是将表达式传递给textstyledisplaystyle

      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())
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-20
        • 1970-01-01
        • 1970-01-01
        • 2015-05-23
        • 2021-08-14
        • 1970-01-01
        • 2022-06-22
        • 1970-01-01
        相关资源
        最近更新 更多