So platzieren Sie mit ggplot2 Beschriftungen über geom_bar für jeden Balken in R.

98

Ich habe folgendes gefunden: Wie man mit ggplot2 Beschriftungen über geom_bar in R setzt , aber es werden nur Beschriftungen (Zahlen) über nur einen Balken gelegt.

Hier sind zum Beispiel zwei Balken für jede x-Achse. Wie macht man dasselbe?

Meine Daten und mein Code sehen folgendermaßen aus:

dat <- read.table(text = "sample Types Number
sample1 A   3641
sample2 A   3119
sample1 B   15815
sample2 B   12334
sample1 C   2706
sample2 C   3147", header=TRUE)

library(ggplot2)
bar <- ggplot(data=dat, aes(x=Types, y=Number, fill=sample)) + 
  geom_bar(position = 'dodge') + geom_text(aes(label=Number))

Dann bekommen wir: Geben Sie hier die Bildbeschreibung ein

Es scheint, dass die Zahlentexte auch im "Ausweich" -Muster positioniert sind. Ich habe das Handbuch geom_text durchsucht , um einige Informationen zu finden, kann es aber nicht zum Laufen bringen.

Vorschläge?

Puriney
quelle

Antworten:

141

Versuche dies:

ggplot(data=dat, aes(x=Types, y=Number, fill=sample)) + 
     geom_bar(position = 'dodge', stat='identity') +
     geom_text(aes(label=Number), position=position_dodge(width=0.9), vjust=-0.25)

ggplot Ausgabe

rcs
quelle
2
(+1) Sie können auch vjust = -0.5nach der position()Anweisung hinzufügen , sodass die Werte direkt über den Balken platziert werden.
Smillig
2
Übrigens, danke , der Code schlägt eine Einstellung vor ymax, so aes(x=Types, y=Number, fill=sample, ymax = 16000)dass ein breiterer oberer Bereich für die y-Achse erzeugt wird, so dass 15815 besser dargestellt wird.
Puriney
Ich erhalte folgende Fehlermeldung: Fehler: stat_count () darf nicht mit einer Ästhetik verwendet werden.
userJT
3
Diese Antwort hat eine neuere Syntax stackoverflow.com/questions/33079500/…
userJT
2
@ Seymourgeom_text(..., angle=-90)
rcs
4

Wenn Sie position_dodge () mit geom_bar () verwenden möchten, wenn x ein POSIX.ct-Datum ist, müssen Sie die Breite mit 86400 multiplizieren, z.

ggplot(data=dat, aes(x=Types, y=Number, fill=sample)) + 
 geom_bar(position = "dodge", stat = 'identity') +
 geom_text(aes(label=Number), position=position_dodge(width=0.9*86400), vjust=-0.25)
matmat
quelle