Cómo poner etiquetas sobre geom_bar para cada barra en R con ggplot2

99

Encontré esto, Cómo colocar etiquetas sobre geom_bar en R con ggplot2 , pero solo coloca etiquetas (números) en una sola barra.

Aquí hay, digamos, dos barras para cada eje x, ¿cómo hacer lo mismo?

Mis datos y código se ven así:

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

Entonces, obtendremos: ingrese la descripción de la imagen aquí

Parece que los textos numéricos también se colocan en el patrón de "esquivar". He buscado en el manual geom_text para encontrar información, pero no puedo hacer que funcione.

Sugerencias

Puriney
fuente

Respuestas:

142

Prueba esto:

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)

salida de ggplot

rcs
fuente
2
(+1) También puede agregar vjust = -0.5después de la position()declaración para que los valores se coloquen justo encima de las barras.
smillig
2
Muchas gracias, por cierto, el código sugiere la configuración ymax, por aes(x=Types, y=Number, fill=sample, ymax = 16000)lo que producirá un área superior más ancha para el eje y, de modo que 15815 se mostrará mejor.
Puriney
Recibo este error: Error: stat_count () no debe usarse con una estética ay.
userJT
3
esta respuesta tiene una sintaxis más nueva stackoverflow.com/questions/33079500/…
userJT
2
@Seymourgeom_text(..., angle=-90)
rcs
4

Para agregar a la respuesta de rcs, si desea usar position_dodge () con geom_bar () cuando x es una fecha POSIX.ct, debe multiplicar el ancho por 86400, por ejemplo,

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
fuente