Erw*_*wan 31 r histogram ggplot2
我的问题非常类似于将R ggplot中的直方图中的y轴标准化为比例,除了我有两组不同大小的数据,我希望每个比例相对于其组大小而不是总大小.
为了更清楚,假设我在数据框中有两组数据:
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))
Run Code Online (Sandbox Code Playgroud)
我可以将两个发行版一起绘制:
ggplot(all,aes(x=value,fill=dataset))+geom_histogram(alpha=0.5,position='identity',binwidth=0.5)
Run Code Online (Sandbox Code Playgroud)
而不是Y轴上的频率我可以有以下比例:
ggplot(all,aes(x=value,fill=dataset))+geom_histogram(aes(y=..count../sum(..count..)),alpha=0.5,position='identity',binwidth=0.5)
Run Code Online (Sandbox Code Playgroud)
但是这给出了相对于总数据大小的比例(这里是500分):是否有可能相对于每个组的大小?
我的目标是使得可以在视觉上比较A和B之间给定箱中的值的比例,而与它们各自的大小无关.也欢迎与我的原创不同的想法!
谢谢!
jlh*_*ard 40
像这样?[根据OP的评论编辑]

ggplot(all,aes(x=value,fill=dataset))+
geom_histogram(aes(y=0.5*..density..),
alpha=0.5,position='identity',binwidth=0.5)
Run Code Online (Sandbox Code Playgroud)
使用y=..density..直方图比例,使每个区域下面的面积为1,或者sum(binwidth*y)=1.因此,您将使用y = binwidth*..density..y来表示每个区域中总数的分数.在你的情况下,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)
Run Code Online (Sandbox Code Playgroud)