【问题标题】:How to change plotting order with multiple geoms and a factor in ggplot2如何使用多个几何图形和 ggplot2 中的一个因子更改绘图顺序
【发布时间】:2020-06-01 12:15:45
【问题描述】:

我正在尝试为三个因子水平(因子命名块)中的每一个绘制一条线和两条丝带的图。这是我对 ggplot2 的调用:

ggplot(df, aes(x = x, y = y, fill = block, color = block)) +
  geom_ribbon(aes(ymin = llb, ymax = uub), alpha = .1, color = NA) +
  geom_ribbon(aes(ymin = lb, ymax = ub), alpha = .5, color = NA) +
  geom_line(size = 2)

这是我得到的: graph a better example added in later edit

如图所示,这是绘制的顺序:

  1. 浅红丝带
  2. 浅蓝色丝带
  3. 浅绿色丝带
  4. 深红丝带
  5. 深蓝色丝带
  6. 深绿色丝带
  7. 红线
  8. 蓝线
  9. 绿线

这很难看。我想首先为第一个因子水平绘制线条和两条丝带,然后为第二个水平绘制所有这些,然后是第三个。或者,更明确地说,按以下顺序绘制:

  1. 浅红丝带
  2. 深红丝带
  3. 红线
  4. 浅蓝色丝带
  5. 蓝线
  6. 深蓝色丝带
  7. 浅绿色丝带
  8. 深绿色丝带
  9. 绿线

在不按因子对数据进行子集化并手动调用 geoms 三次的情况下这样做有什么想法吗?也许是将三个几何图形组合成一个新几何图形的简单方法?

谢谢!

【问题讨论】:

    标签: r ggplot2 geom-ribbon


    【解决方案1】:

    填充颜色自动确定时,根据因子的level分配。

    考虑以下样本数据的密度图:

    set.seed(3)
    data <- data.frame(factor = rep(LETTERS[1:3],each = 50),
                       value = c(rnorm(n = 50, mean = 5, sd = 4),
                                 rnorm(n = 50, mean = 10, sd = 4),
                                 rnorm(n = 50, mean = 15, sd = 4)))
    
    library(ggplot)
    ggplot(data, aes(x = value, fill = factor)) +
      geom_density(color = NA)
    

    如果我们添加对scale_fill_manual 的调用并提供值,我们可以颠倒颜色的顺序:

    ggplot(data, aes(x = value, fill = factor)) +
      geom_density(color = NA) +
      scale_fill_manual(values = c("#619CFF","#00BA38","#F8766D"))
    

    如果我们将此与因子重新排序结合使用,factor(x, levels = y) 我们还可以更改绘制在顶部的因子:

    ggplot(data, aes(x = value, fill = factor(factor, levels = c("C","B","A")))) +
      geom_density(color = NA) + labs(fill = "factor") +
      scale_fill_manual(values = c("#619CFF","#00BA38","#F8766D")) + 
      guides(fill = guide_legend(reverse = TRUE))
    

    【讨论】:

    • 感谢您的回答!这就是如何使用单个几何图形重新排序绘图。我确实使用factor 来选择我的因子排序。但是 - 这并不能解决按因子顺序而不是按几何顺序绘制多个几何图形的问题。
    • 嗨 YanivA,我不明白你在问什么。也许您可以 edit your question 澄清一下并提供您的数据样本。
    • 感谢您的回复!我用现在绘制几何图形的明确顺序和所需的顺序编辑了问题。我还添加了一个更清晰的示例图。
    猜你喜欢
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    相关资源
    最近更新 更多