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?

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


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)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.