web-dev-qa-db-ja.com

R ggplotのヒストグラムのy軸をグループごとの比率に正規化する

私の質問は R ggplotのヒストグラムのy軸を比率に正規化する に非常に似ていますが、異なるサイズのデータ​​の2つのグループがあり、各比率がそのグループサイズに相対的であることを望んでいます合計サイズの代わりに。

わかりやすくするために、データフレームに2つのデータセットがあるとします。

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))

2つの分布を一緒にプロットできます。

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の間の特定のビンの値の比率を、それぞれのサイズとは無関係に視覚的に比較できるようにすることです。オリジナルと違うアイデアも大歓迎です!

ありがとう!

35
Erwan

このような? [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.._を使用して、各ビンの合計の小数を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)
_
43
jlhoward