1

我正在尝试为三个因子级别(名为块的因子)中的每一个绘制一条线和两条丝带的图。这是我对 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. 绿线

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

谢谢!

4

1 回答 1

0

当填充颜色被自动确定时,它是根据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))

在此处输入图像描述

于 2020-06-01T12:39:49.807 回答