我试图用周围区域绘制多条线,使用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()
但是,当我保持简单,我们这个代码
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()
背景数据的行越过“顶部”色带,或者如果我切换geom_line和geom_ribbon,我的中间线将不再可见。
对于这个例子,冗长的调用有效,但在我的实际数据中,我有更多的行,并且我希望能够动态地将行从背景切换到前景。
有什么方法可以告诉ggplot2有一个必须在不同的geom之间切换的顺序?
P.S。我还不能发布图片,如果我的问题不清楚,请对不起。
答案 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)))
})