将阴影区域添加到五分位数之间的直方图

时间:2014-10-13 18:09:07

标签: r ggplot2

所有

我有一张图表,其中包含2个直方图,其中我还绘制了代表第20,第40,第60和第80百分位数的线条,下面的代码再现了具有虚拟数据的类似图表

data <- rbind(data.frame(x=rnorm(1000,0,1),g="one"),data.frame(x=rnorm(1000,0.2,1.5),g="two"))
q1 = melt(ddply(melt(data,id.vars="g"),.(g),summarise,q20=quantile(value,.2,na.rm=T),
           q40=quantile(value,.4,na.rm=T),q60=quantile(value,.6,na.rm=T),q80=quantile(value,.8,na.rm=T)))
ggplot(data,aes(x=x,fill=g))+
  geom_vline(data=q1,aes(xintercept=value,group=variable),linetype=2,color="black")+
  #stat_bin(aes(y=..count../sum(..count..)),binwidth=0.1,alpha=0.4,geom="bar")+
  geom_histogram(aes(y=..count../sum(..count..)),alpha=0.75,binwidth=0.1)+facet_grid(g~.)+theme_bw()+coord_cartesian(xlim=c(-3,3))

enter image description here

我想在第40行和第60行之间添加阴影区域(可能是灰色)以显示中间的五分之一 - 我希望该区域是数据驱动的(我使用的是数据帧q1,这是数据派生的,这是可以接受,我只是不想手动输入值)

如何实现这一目标?我无法做到这一点

感谢所有帮助

1 个答案:

答案 0 :(得分:-1)

经过更多实验,我能够使用以下代码解决它

在某种程度上欺骗geom_rect的原因是它想要一个x变量(所以我在q上重命名为q40)。我不知道为什么ggplot不喜欢xmin = q40,但它喜欢xmax = q60

data <- rbind(data.frame(x=rnorm(1000,0,1),g="one"),data.frame(x=rnorm(1000,0.2,1.5),g="two"))
q = ddply(melt(data,id.vars="g"),.(g),summarise,q20=quantile(value,.2,na.rm=T),
          q40=quantile(value,.4,na.rm=T),q60=quantile(value,.6,na.rm=T),q80=quantile(value,.8,na.rm=T))
q1 = melt(q)
names(q)[3] = 'x'

ch <- ggplot(data,aes(x=x,fill=g))+
  geom_vline(data=q1,aes(xintercept=value,group=variable),linetype=2,color="black")+
  geom_histogram(aes(y=..density..),alpha=0.75,binwidth=0.1)+facet_grid(g~.)+theme_bw()+coord_cartesian(xlim=c(-3,3))+
  coord_cartesian(ylim=c(0,0.5))++geom_rect(data=q,aes(xmin=x,xmax=x1,ymin=0,ymax=.5,group=g),fill="gray",alpha=0.1)
ch

enter image description here