我试图在两条曲线下遮挡该区域;我希望获得完全相同的图(尽管没有阈值),如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)
答案 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"))
这是一个非常好的解决方案,但我发现自己一遍又一遍地编写类似的代码,所以我写了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"))
答案 1 :(得分:1)
如果它对其他人也有用,解决方案就是添加scale_fill_manual()
并更改{{1}中的数字1
和2
值变量分别为group
和"1"
字符值,如下所示:
将"2"
更改为1
,将"1"
更改为2
,如下所示:
"2"
并运行:
data1$group<-"1"
data2$group<-"2"