首页 > 解决方案 > 使用 geom_ribbon 对标准偏差着色进行着色

问题描述

我正在使用一个数据框,其中有列:

     species  replicate  position DOY   RED.PEAK RED.PEAK.SD FAR.RED.PEAK FAR.RED.PEAK.SD
1 LINGONBERRY         1      LOW   1 0.10218177 0.050779465   0.14498610      0.04848566
2 LINGONBERRY         1      LOW  10 0.12089622 0.039990500   0.18177440      0.03263417
3 LINGONBERRY         1      LOW   2 0.10861619 0.039823347   0.20582430      0.05709061
4 LINGONBERRY         1      LOW   3 0.05398631 0.006064099   0.10750730      0.01954550
5 LINGONBERRY         1      LOW   4 0.08722205 0.017874483   0.14446139      0.03133565
6 LINGONBERRY         1      LOW   5 0.04872162 0.028601630   0.09535204      0.02216967

物种、复制、位置和时间是我的案例,RED.PEAK 和 FAR.RED.PEAK 是我的价值观,RED.PEAK。标清和远红峰。SD是RED.PEAK 和 FAR.RED.PEAK 的标准偏差

我正在使用 ggplot 用 facet_grid 绘制不同的物种(3),用线型绘制不同的位置(2),用颜色绘制不同的复制品(3)。

NEW.gridplot <- ggplot(new.plot.table,aes(DOY, RED.PEAK, group=interaction(position, replicate)))+
  scale_x_discrete(limit = c("II Feb", "I Mar", "II Mar", "I Apr", "II Apr", "I May", "II May", "I Jun", "II Jun", "I Jul"))+ 
  facet_grid(.~species)+
  geom_line(aes(color=replicate, linetype=position), size=2)+
  scale_linetype_manual(values=c("dashed", "solid")) +
  scale_color_manual(values = c('black', 'red', 'blue')) +
  geom_ribbon(aes(ymin = RED.PEAK - RED.PEAK.SD,
                  ymax = RED.PEAK + RED.PEAK.SD), alpha = 0.1) +
  myplotting

print(NEW.gridplot)

查看我现在拥有的 ggplot 示例

它运作良好。但是,我也想在 geom_ribbon 中将阴影着色为黑色、蓝色和红色。

 geom_ribbon(aes(ymin = RED.PEAK - RED.PEAK.SD,
                  ymax = RED.PEAK + RED.PEAK.SD), alpha = 0.1, fill=(values = c('black', 'red', 'blue')))

不起作用,传递错误错误:美学必须是长度1或与数据相同(150):填充然后:

geom_ribbon(aes(ymin = ORANGE.PEAK - ORANGE.PEAK.SD,
                  ymax = ORANGE.PEAK + ORANGE.PEAK.SD), alpha = 0.1, fill=replicate)+
                  scale_fill_manual(values = c('black', 'red', 'blue'))  

也没有工作,在 rep(value[[k]], length.out = n) 中传递错误错误:尝试复制“闭包”类型的对象

寻找一种解决方案,让 geom_ribbon 中的阴影与 geom_line 中的相应线条颜色相同。

标签: rggplot2fillgeom-ribbon

解决方案


我认为您的第二次尝试几乎是正确的。但是fill=...应该在aes函数内部,然后你需要另一个```scale_fill_manual````:

  geom_ribbon(aes(ymin = RED.PEAK - RED.PEAK.SD,
                  ymax = RED.PEAK + RED.PEAK.SD, fill = c("black","red","blue")), alpha = 0.1, show.legend = F) +
  scale_fill_manual(values = c("black","red","blue"))

推荐阅读