ggplot2按组曲线下的阴影区域

时间:2018-01-15 17:33:13

标签: r plot ggplot2 gplots

我试图在两条曲线下遮挡该区域;我希望获得完全相同的图(尽管没有阈值),如previous post中所示,唯一的区别是我想使用geom_line()而不是stat_density()。有没有办法做到这一点?提前谢谢。

我已经尝试了该帖子中的建议,但是当我使用geom_line()时它不起作用。此外,我尝试了不同的东西,但这不是我想要的,因为我想为不同的组使用不同的颜色。这是初始代码:

library(ggplot2)
x <- seq(0,1,0.005)
y1 <- dbeta(x,3,3)
data1<-data.frame('x'=x,'y'=y1)
data1$group<-1

y2 <- dbeta(x,10,4)
data2<-data.frame('x'=x,'y'=y2)
data2$group<-2

data<-rbind(data1, data2)
ggplot(data, aes(x=x, y=y, group=group, col=group, fill=group)) +  geom_line(size=1) +geom_ribbon(data=subset(data,x>0 &x<1),aes(x=x,ymax=y),ymin=0, fill="green4",alpha=0.3)

如果上述链接无效:ggplot2 shade area under density curve by group

2 个答案:

答案 0 :(得分:4)

提供的解决方案here如下所示:

library(ggplot2)
x <- seq(0,1,0.005)
y1 <- dbeta(x,3,3)
data1<-data.frame('x'=x,'y'=y1)
data1$group<-"1"

y2 <- dbeta(x,10,4)
data2<-data.frame('x'=x,'y'=y2)
data2$group<-"2"

data<-rbind(data1, data2)
ggplot(data, aes(x=x, y=y, group=group, fill=group)) +
  geom_line(size=.5) + 
  geom_ribbon(data=subset(data,x>0 & x<1),aes(x=x,ymax=y),ymin=0,alpha=0.3) +
  scale_fill_manual(name='', values=c("1" = "green4", "2" = "red"))

enter image description here

这是一个非常好的解决方案,但我发现自己一遍又一遍地编写类似的代码,所以我写了geom_density_line()。它的工作方式类似于geom_density(),但绘制的是一条带有填充区域的线,而不是填充区域周围的多边形。它是ggridges包的当前开发版本的一部分:

# current development version is needed for this to work
library(ggridges) # install.github("clauswilke/ggridges")

ggplot(data, aes(x=x, y=y, group=group, fill=group)) +
  geom_density_line(stat = "identity", size=.5, alpha=0.3) +
  scale_fill_manual(name='', values=c("1" = "green4", "2" = "red"))

enter image description here

答案 1 :(得分:1)

如果它对其他人也有用,解决方案就是添加scale_fill_manual()并更改{{1}中的数字12值变量分别为group"1"字符值,如下所示:

"2"更改为1,将"1"更改为2,如下所示:

"2"

并运行:

data1$group<-"1"
data2$group<-"2"