次のようなグラフィックを作成したいと思います。
私の元のデータセットは次のようになります。
> bb[sample(nrow(bb), 20), ]
IMG QUANT FIX
25663 1 1 0
7936 2 2 0
23586 3 2 0
23017 2 2 1
31363 1 3 1
7886 2 2 0
23819 3 3 1
29838 2 2 1
8169 2 3 1
9870 2 3 0
31440 2 1 0
35564 3 1 0
24066 1 2 0
12020 3 2 0
6742 3 2 0
6189 2 3 0
26692 2 3 0
1387 3 2 0
31839 2 3 1
28637 3 2 0
したがって、バーはFIX = 1
因子ごとQUANT
および因子ごとに表示されるという考え方ですIMG
。
を使用して、データセットをパーセンテージに集計しましたplyr
library(plyr)
bb.perc <- ddply(bb,.(QUANT,IMG),summarise,FIX.PROP = sum(FIX) / length(FIX))
それはほとんど正しいことをします:
QUANT IMG FIX.PROP
1 1 1 0.52439024
2 1 2 0.19085366
3 1 3 0.13658537
4 2 1 0.20414201
5 2 2 0.53964497
6 2 3 0.09585799
7 3 1 0.29000000
8 3 2 0.13000000
9 3 3 0.40705882
しかし、グラフを作成すると、FIX==0
ケースが考慮されません。つまり、すべてのバーが同じ高さ、つまり 100% になります。これは私が望んでいるものではありません。個々の QUANT サブフレームの合計が 100% にならないことに注意してください。
> sum(bb.perc[1:3,]$FIX.PROP)
[1] 0.8518293
> sum(bb.perc[4:6,]$FIX.PROP)
[1] 0.839645
> sum(bb.perc[7:9,]$FIX.PROP)
[1] 0.8270588
R でできる最善のことは、カウントを表示することです。
# Take only the positive samples
bb.pos <- bb[bb$FIX == 1,]
# Plot the counts
ggplot(bb,aes(factor(QUANT),fill=factor(IMG))) + geom_bar() +
scale_y_continuous(labels=percent)
そして、結果は次のとおりです。
これも私が望むものではありません:
- パーセンテージスケールはかなり外れています。関数に 100% ポイントを渡す方法が必要ですが、方法が
percent
わかりません。 - ラベルがありません。
すでに SO に関する同様の質問が多数ありますが、特定の問題の解決策を推定するのに十分な量の知性 (または R の理解) が不足しているようです。
ご指摘ありがとうございます。
編集: Sven Hohenstein は既に回答を提供していますが、これが私が最終的に自分で行った方法です:
> ggplot(bb.perc,aes(x=factor(QUANT),y=FIX.PROP,label=paste(round(FIX.PROP*100),
"%"),fill=factor(IMG)))+ geom_bar(stat="identity") + geom_text(position="stack",
aes(ymax=1),vjust=5) + scale_y_continuous(labels = percent)
を使用しbb.perc
てさらに定義した を使用しplyr
ます。これには、パーセンテージがグローバルではなく、列ごとにローカルに計算されるという利点があります。
助けてくれてありがとう。次の 2 つの質問とそれぞれの回答は、正しく理解するのに大いに役立ちました。
私が最初に間違っていたのは、position = "fill"
パラメータを
に渡すことでしたgeom_bar()
。これにより、何らかの理由ですべてのバーが同じ高さになりました!