ich eine Grafik erzeugen möchten, die etwa wie folgt aussieht:R gestapelt Prozentbalkendiagramm mit Prozentsatz von binären Faktor und Etiketten (mit ggplot)
Meine ursprünglichen Datensatz etwa wie folgt aussieht:
So ist> 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
die Idee, dass die Balken angezeigt werden, wo FIX = 1
pro Faktor QUANT
und pro Faktor IMG
.
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
Aber jetzt, wenn ich ein Diagramm machen, ist es nicht: plyr
library(plyr)
bb.perc <- ddply(bb,.(QUANT,IMG),summarise,FIX.PROP = sum(FIX)/length(FIX))
Es ist fast das Richtige mit
Ich habe meine Daten in Prozentsätzen aggregiert Konto für die FIX==0
Fälle, dh alle Bars haben die gleiche Höhe, nämlich 100%, was nicht das ist, was ich will. Beachten Sie, wie die einzelnen QUANT Subframes summieren sich nicht zu 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
Das Beste, was ich mit R tun können, ist Zählungen anzuzeigen:
# 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)
und Ergebnisse in: Dies ist auch nicht was ich will:
- Die Prozentskala ist weg. Ich brauche einen Weg, um den 100% -Punkt an die
percent
Funktion zu übergeben, aber ich habe keine Ahnung wie. - Es fehlen die Etiketten.
Es gibt viel ähnlich Fragen auf SO schon, aber ich scheine die ausreichende Menge an Intelligenz (oder Verständnis von R) fehle von ihnen zu einer Lösung für mein besonderes Problem zu extrapolieren.
Danke für irgendwelche Hinweise!
EDIT: Sven Hohenstein bereits eine Antwort zur Verfügung gestellt, aber hier ist, wie ich es selbst auch tun endete:
> 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)
die bb.perc
Verwendung, die ich weiter plyr
mit definiert werden. Dieser hat den Vorteil, dass die Prozentsätze lokal pro Spalte und nicht global berechnet werden.
Danke allen für die Hilfe.Die beiden folgenden Fragen und ihre jeweiligen Antworten hat mir geholfen, stark es immer rechts:
Stacked Bar Graph Labels with ggplot2
Adding labels to ggplot bar chart
Was ich falsch gemacht habe anfangs war vorbei an der position = "fill"
Parameter geom_bar()
, die aus irgendeinem Grund Alle Bars haben die gleiche Höhe!
Erstaunlich, danke! Ich hatte gerade gerade den Punkt erreicht, an dem ich auch die richtige Handlung hatte, aber ich benutzte den 'plyr'-Weg, um es zu tun. Ich wusste nicht, dass es innerhalb von ggplot selbst möglich ist! –