之前发过一篇推文 ggplot2画散点图拼接密度图 模仿下面这幅图片。但是遇到一个问题是如何给密度图某一个部分填充不同的颜色,就像下面的图片被红色方框圈住的部分。
image.png
今天找到了解决办法,在这里记录一下。
参考链接是 ggplot2 area plot : Quick start guide - R software and data visualization - Easy Guides - Wiki - STHDA
首先是最基本的密度分布图
第一步是构造数据
代码语言:javascript复制x<-rnorm(500,0,1)
df<-data.frame(x)
df
基本的密度分布图
代码语言:javascript复制ggplot(df,aes(x))
geom_density()
image.png
填充颜色用fill参数,更改线条颜色用color参数
代码语言:javascript复制ggplot(df,aes(x))
geom_density(fill="#e72a8a",
color="#1c9e77",
size=1.5)
theme_bw()
image.png
这里需要注意的一个问题是默认的Y轴是小数,应该是某个值占所有的数据的比例,如果要把它改成频数可以加stat="bin"
参数
ggplot(df,aes(x))
geom_density(fill="#e72a8a",
color="#1c9e77",
size=1.5,
stat="bin")
theme_bw()
image.png
上面的图如果想要给x小于-2和大于2的填充另外一种颜色改如何实现呢?
代码语言:javascript复制dat<-with(density(df$x),data.frame(x,y))
dat
dat1<-dat[dat$x<(-2),]
dat2<-dat[dat$x>2,]
ggplot()
geom_density(data=df,aes(x=x),fill="red")
geom_area(data=dat1,aes(x=x,y=y),fill="blue")
geom_area(data=dat2,aes(x=x,y=y),fill="blue")
theme_bw()
image.png
欢迎大家关注我的公众号
小明的数据分析笔记本