2010-03-31 10 views
13

Ich versuche Frequenzen innerhalb von Barplot anzeigen ... Nun, ich möchte sie irgendwo in der Grafik: unter den Balken, innerhalb von Balken, über Balken oder im Legendenbereich. Und ich erinnere mich (ich kann falsch liegen), dass es in ggplot2 getan werden kann. Dies ist wahrscheinlich ein einfacher ... zumindest scheint es einfach. Hier ist der Code:Zeige Frequenzen zusammen mit Barplot in ggplot2

p <- ggplot(mtcars) 
p + aes(factor(cyl)) + geom_bar() 

Gibt es eine Chance, dass ich Frequenzen in das Diagramm eingebettet bekommen kann?

Antwort

18

geom_text ist tha Analogon von text von Basis Grafiken: zum Beispiel y=..count..+1:

p + geom_bar() + stat_bin(aes(label=..count..), vjust=0, 
          geom="text", position="identity") 

Wenn Sie die y-Position der Etiketten anpassen möchten, können Sie die y= Ästhetik innerhalb stat_bin verwenden können wird das Etikett eine Einheit über die Bar setzen.

Das obige funktioniert auch, wenn Sie geom_text und stat="bin" innen verwenden.

+0

Für das Etikett, warum gibt es ein ".." vor und nach der Zählung? –

+1

'..count..' ist der Name der Variablen, die die Bin-Häufigkeiten enthält, die' stat_bin' automatisch erstellt. Also die zwei Perioden davor und danach sind Teil des Variablennamens – Aniko

+0

Diese Antwort gab mir einen Fehler 'Fehler: stat_count erfordert die folgende fehlende Ästhetik: x'. Jedoch addieren Sie 'aes (factor (cyl))' und 'stat_bin' in' stat_count' wie in 'p + aes (Faktor (cyl)) + geom_bar() + stat_count (aes (label = .. count. .), vjust = 0, geom = "text", position = "identity") 'hat funktioniert. – steveb

0

Wenn Sie nicht auf ggplot2 beschränkt sind, können Sie? Text aus Basisgrafiken oder? Boxed.labels aus dem Plotrix-Paket verwenden.

4

Ein harter Weg, es zu tun. Ich bin mir sicher, dass es bessere Ansätze gibt.

ggplot(mtcars,aes(factor(cyl))) + 
geom_bar() + 
geom_text(aes(y=sapply(cyl,function(x) 1+table(cyl)[names(table(cyl))==x]), 
label=sapply(cyl,function(x) table(cyl)[names(table(cyl))==x]))) 
+11

Es ist im Allgemeinen gute Praxis Ihre Daten _outside_ Ihrer Plotten Code zu erstellen. Und es ist nie eine gute Idee, Daten in die ästhetischen Abbildungen zu schieben. – hadley

0

zu wollen, wenn verschiedene Informationen die folgenden Werke hinzuzufügen:

ggplot(mydata, aes(x=clusterSize, y=occurence)) + 
geom_bar() + geom_text(aes(x=clusterSize, y=occurence, label = mydata$otherinfo)) 
+0

Können Sie diese Antwort replizieren, indem Sie ein Beispiel angeben, das sich auf Daten bezieht, die in 'Datasets'-Paket (oder einem anderen in CRAN-Repos verfügbaren Paket) verfügbar sind? Ich bezweifle, dass Barplot gezeichnet werden kann mit "y" Variable angegeben wie "..." – aL3xa