将GGR图中直方图中的y轴标准化为按组比例

将GGR图中直方图中的y轴标准化为按组比例,r,ggplot2,histogram,R,Ggplot2,Histogram,我的问题与非常相似,只是我有两组大小不同的数据,我希望每个比例都与其组大小有关,而不是总大小 为了更清楚,假设我在一个数据框中有两组数据: 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)) 而不是Y轴上的频率,我可以得到以下比例: ggpl

我的问题与非常相似,只是我有两组大小不同的数据,我希望每个比例都与其组大小有关,而不是总大小

为了更清楚,假设我在一个数据框中有两组数据:

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))
而不是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之间给定箱子中的值的比例,独立于它们各自的大小。与我最初的想法不同的想法也是受欢迎的


谢谢

像这样?[根据OP的评论编辑]

ggplot(all,aes(x=value,fill=dataset))+
  geom_histogram(aes(y=0.5*..density..),
                 alpha=0.5,position='identity',binwidth=0.5)

使用
y=…密度..
缩放直方图,使每个直方图下的面积为1,或
sum(binwidth*y)=1。
因此,您可以使用
y=binwidth*.density..
使y表示每个仓位中总面积的分数。在您的情况下,
binwidth=0.5

在国际海事组织,这更容易理解:

ggplot(all,aes(x=value,fill=dataset))+
  geom_histogram(aes(y=0.5*..density..),binwidth=0.5)+
  facet_wrap(~dataset,nrow=2)


感谢您的回答,但实际上我不认为密度等于计数除以数据集,除非条形宽度为1(参见中的示例)。特别是在我的例子中,我想读一个箱子在Y轴上代表的百分比。你是对的,需要按箱子宽度缩放。看我的编辑。哦,是的,当然!我甚至没有意识到,当我回答时,我想我太专注于
y=..count../sum(..count..)
的版本了。显然,
.count../sum(..count..)
每个计数除以总计数,而在
.density..
的情况下,它独立地应用于每个组:我仍然不明白为什么,如果你有想法的话?我刚刚遇到了这个问题。根据,您可以执行
aes(y=stat(density*width))
,这将获得相同的结果,但无需手动设置binwidth。然而,目前还不清楚这是否应该被允许。
ggplot(all,aes(x=value,fill=dataset))+
  geom_histogram(aes(y=0.5*..density..),binwidth=0.5)+
  facet_wrap(~dataset,nrow=2)