Comment mettre des étiquettes sur geom_bar pour chaque barre de R avec ggplot2

99

J'ai trouvé ceci, Comment mettre des étiquettes sur geom_bar dans R avec ggplot2 , mais il suffit de mettre des étiquettes (nombres) sur une seule barre.

Voici, disons, deux barres pour chaque axe x, comment faire la même chose?

Mes données et mon code ressemblent à ceci:

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

Ensuite, nous obtiendrons: entrez la description de l'image ici

Il semble que les textes numériques soient également positionnés dans le motif "esquiver". J'ai cherché dans le manuel de geom_text pour trouver des informations, mais je ne peux pas le faire fonctionner.

Suggestions?

Puriney
la source

Réponses:

142

Essaye ça:

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)

sortie ggplot

rcs
la source
2
(+1) Vous pouvez également ajouter vjust = -0.5après l' position()instruction afin que les valeurs soient placées juste au-dessus des barres.
smillig
2
Un grand merci, au fait, le code suggère un réglage ymax, donc aes(x=Types, y=Number, fill=sample, ymax = 16000), produira une zone supérieure plus large pour l'axe y, de sorte que 15815 sera mieux montré.
Puriney
J'obtiens cette erreur: Erreur: stat_count () ne doit pas être utilisé avec ay esthétique.
userJT
3
cette réponse a une syntaxe plus récente stackoverflow.com/questions/33079500/…
userJT
2
@Seymourgeom_text(..., angle=-90)
rcs
4

Pour ajouter à la réponse de rcs, si vous voulez utiliser position_dodge () avec geom_bar () lorsque x est une date POSIX.ct, vous devez multiplier la largeur par 86400, par exemple,

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
la source