让我们说我使用ggplot创建一个简单的情节:
data(mtcars)
var1 <- mtcars$mpg
var2 <- mtcars$mpg + 5
df <- melt(cbind(var1,var2))
ggplot(df,aes(x=X1, y=value,color=X2))+geom_line()
我想在每条绘制线上画一个阴影区域。
问题是我想为每一行使用不同的值。
我尝试使用geom_ribbon()
,但我只能为其中一行提供阴影区域值,但不能为多行提供。
有没有办法分别为每一行绘制geom_ribbon()
?
答案 0 :(得分:4)
这就是你想要的吗?
data(mtcars)
var1 <- mtcars$mpg
var2 <- mtcars$mpg + 15
df <- melt(cbind(var1,var2))
df$shadv <- rep(c(2,6),each=length(var1))
df1 <- df[df$X2=="var1",]
df2 <- df[df$X2=="var2",]
ggplot(df,aes(x=X1, y=value,color=X2))+
geom_ribbon(data=df1,aes(x = X1,ymin = value - shadv, ymax = value + shadv), inherit.aes = FALSE,fill = "lightblue")+
geom_ribbon(data=df2,aes(x = X1,ymin = value - shadv, ymax = value + shadv), inherit.aes = FALSE,fill = "lightgreen")+
geom_point()+geom_line()
答案 1 :(得分:0)
您可以将geom_ribbon
与其他任何几何图形一样对待-根据数据的某些方面创建多个几何图形并将值映射到美观。因此,可以像处理aes
内的颜色,填充,大小等一样处理y-min和y-max参数,包括这些偏移量的不同值。为了说明,我刚刚添加了一个列,提供了这些偏移量,然后这些偏移量用于确定功能区的宽度。您可以像我在此处那样设置线条的颜色和功能区的填充以使其匹配,或使用不同的颜色集。
library(dplyr)
library(ggplot2)
data(mtcars)
var1 <- mtcars$mpg
var2 <- mtcars$mpg + 5
df <- reshape::melt(cbind(var1, var2)) %>%
mutate(gap = ifelse(X2 == "var1", 1, 2))
ggplot(df, aes(x = X1, y = value, color = X2)) +
geom_line() +
geom_ribbon(aes(ymin = value - gap, ymax = value + gap, fill = X2), alpha = 0.3, color = NA) +
scale_fill_manual(values = c("skyblue", "coral"), aesthetics = c("color", "fill"))
由于这个问题已有4年之久,所以我还要指出,在比例尺中提供aesthetics
参数是最近添加的一种快捷方式,可以一次将同一调色板设置为多种编码(在这种情况下,颜色和填充);我很少实际使用它,但是它适合这里的问题。