我想产生一个图形,看起来像这样的标签(与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本身! –