我想產生一個圖形,看起來像這樣的標籤(與ggplot)的百分比:[R堆積百分比條形圖用二進制係數和
我的原始數據集看起來是這樣的:
> 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
這樣的想法是,條顯示,其中每個因素QUANT
FIX = 1
每 因素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_continous(labels=percent)
和結果: 這是也不是我想要的:
- 百分比範圍是離開的。我需要一種方法將100%的點傳遞給
percent
函數,但我不知道如何。 - 它缺乏標籤。
有對類似的諸多問題SO了,但我似乎缺乏 智力足夠量(或R的理解),從他們推斷 來解決我的具體問題。
感謝您的指點!
編輯:斯文海恩斯坦已經給出了一個答案,但在這裏就是我終於實現了我自己,以及:
> 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)
使用我進一步明確了使用plyr
的bb.perc
。這一個具有 的優勢,即百分比是按本地每列計算的,而不是全局的 。
謝謝大家的幫助。將在得到它的權利大大以下兩個問題,它們各自 答案幫我:
Stacked Bar Graph Labels with ggplot2
Adding labels to ggplot bar chart
我沒有什麼錯最初,是position = "fill"
參數傳遞給 geom_bar()
,由於某種原因使所有酒吧都有相同的高度!
非常感謝!我其實剛剛就已經到了我有正確情節的地步,但我正在使用'plyr'的方式來做到這一點。我不知道它可能來自ggplot本身! –