ggplot2 z多个geoms的顺序(背景到前景)

时间:2017-11-27 08:42:14

标签: r ggplot2

我试图用周围区域绘制多条线,使用ggplot2,使用geom_ribbon作为are,使用geom_line绘制中心线。这些值是重叠的,但我希望每个功能区/线组合可以是底部或顶部组合。

这是一个可重复的例子:

library(ggplot2)
x <- 1:10
y <- c(1+x/100, 2-x, .1*x^2)
data <- data.frame(x=rep(x,3), y=y, lower=y-1, upper=y+1, color=rep(c('green', 'blue', 'yellow'), each=10))

在示例中,我可以使用此代码获取我想要的图:

ggplot() +
  geom_ribbon(data=data[data$color=='green',],aes(x=x, ymin=lower, ymax=upper, fill=paste0('light',color))) +
  geom_line(data=data[data$color=='green',],aes(x=x, y=y, col=color)) +
  geom_ribbon(data=data[data$color=='blue',],aes(x=x, ymin=lower, ymax=upper, fill=paste0('light',color))) +
  geom_line(data=data[data$color=='blue',],aes(x=x, y=y, col=color)) +
  geom_ribbon(data=data[data$color=='yellow',],aes(x=x, ymin=lower, ymax=upper, fill=paste0('light',color))) +
  geom_line(data=data[data$color=='yellow',],aes(x=x, y=y, col=color)) +
  scale_color_identity() +
  scale_fill_identity()

enter image description here

但是,当我保持简单,我们这个代码

plot <- ggplot(data=data) +
  geom_ribbon(aes(x=x, ymin=lower, ymax=upper, fill=paste0('light',color))) +
  geom_line(aes(x=x, y=y, col=color)) +
  scale_color_identity() +
  scale_fill_identity()

enter image description here

背景数据的行越过“顶部”色带,或者如果我切换geom_line和geom_ribbon,我的中间线将不再可见。

对于这个例子,冗长的调用有效,但在我的实际数据中,我有更多的行,并且我希望能够动态地将行从背景切换到前景。

有什么方法可以告诉ggplot2有一个必须在不同的geom之间切换的顺序?

P.S。我还不能发布图片,如果我的问题不清楚,请对不起。

1 个答案:

答案 0 :(得分:3)

你可以通过循环保存一些打字

 ggplot(data=data) +
   purrr::map(.x = split(data, f = data$color),  
              .f = function(d){
     list(geom_ribbon(data=d,aes(x=x, ymin=lower, ymax=upper), fill=paste0('light',unique(d$color))), 
       geom_line(data=d,aes(x=x, y=y), col=unique(d$color)))
   })