Jak umieścić etykiety na geom_bar dla każdego słupka w R za pomocą ggplot2

104

Znalazłem to, jak umieścić etykiety nad geom_bar w R za pomocą ggplot2 , ale po prostu umieścił etykiety (liczby) na tylko jednym pasku.

Oto, powiedzmy, dwa słupki dla każdej osi X, jak zrobić to samo?

Moje dane i kod wyglądają tak:

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))

Następnie otrzymamy: wprowadź opis obrazu tutaj

Wydaje się, że teksty liczbowe są również pozycjonowane we wzorcu „unik”. Przeszukałem podręcznik geom_text, aby znaleźć informacje, ale nie mogę go uruchomić .

Propozycje?

Puriney
źródło

Odpowiedzi:

149

Spróbuj tego:

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 wyjście

rcs
źródło
2
(+1) Możesz również dodać vjust = -0.5po position()wyrażeniu, aby wartości były umieszczone tuż nad słupkami.
smillig
2
Wielkie dzięki, przy okazji, kod sugeruje ustawienie ymax, więc aes(x=Types, y=Number, fill=sample, ymax = 16000)wygeneruje szerszy górny obszar dla osi Y, dzięki czemu 15815 będzie lepiej widoczne.
Puriney,
Otrzymuję ten błąd: Błąd: stat_count () nie może być używany z estetyką ay.
użytkownikJT
3
ta odpowiedź ma nowszą składnię stackoverflow.com/questions/33079500/…
userJT
2
@Seymourgeom_text(..., angle=-90)
rcs
4

Aby dodać do odpowiedzi rcs, jeśli chcesz użyć position_dodge () z geom_bar (), gdy x jest datą POSIX.ct, musisz pomnożyć szerokość przez 86400, np.

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
źródło