我的问题与Normalizing y-axis in histograms in R ggplot to proportion非常相似,只是我有两组不同大小的数据,我希望每个比例都相对于组大小而不是总大小。
为了更清楚,假设我在数据框中有两组数据:
dataA<-rnorm(100,3,sd=2)
dataB<-rnorm(400,5,sd=3)
all<-data.frame(dataset=c(rep('A',length(dataA)),rep('B',length(dataB))),value=c(dataA,dataB))
我可以将两个发行版一起绘制:
ggplot(all,aes(x=value,fill=dataset))+geom_histogram(alpha=0.5,position='identity',binwidth=0.5)
而不是Y轴上的频率,我可以得到以下比例:
ggplot(all,aes(x=value,fill=dataset))+geom_histogram(aes(y=..count../sum(..count..)),alpha=0.5,position='identity',binwidth=0.5)
但这会给出相对于总数据大小的比例(此处为500分):是否可以将其与每个组大小相对应?
我的目标是使得可以在视觉上比较A和B之间给定箱中的值的比例,与它们各自的大小无关。也欢迎与我原创的想法不同的想法!
谢谢!
答案 0 :(得分:36)
喜欢这个? [根据OP的评论编辑]
ggplot(all,aes(x=value,fill=dataset))+
geom_histogram(aes(y=0.5*..density..),
alpha=0.5,position='identity',binwidth=0.5)
使用y=..density..
缩放直方图,使每个下方的区域为1,或sum(binwidth*y)=1.
因此,您可以使用y = binwidth*..density..
来表示每个分区中总数的分数。在您的情况下,binwidth=0.5
。
IMO这个更容易理解:
ggplot(all,aes(x=value,fill=dataset))+
geom_histogram(aes(y=0.5*..density..),binwidth=0.5)+
facet_wrap(~dataset,nrow=2)