在ggplot2对象中的多行附近添加单独的阴影区域

时间:2016-07-06 14:00:59

标签: r ggplot2

让我们说我使用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()

2 个答案:

答案 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()

enter image description here

答案 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参数是最近添加的一种快捷方式,可以一次将同一调色板设置为多种编码(在这种情况下,颜色和填充);我很少实际使用它,但是它适合这里的问题。

相关问题