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

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


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)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.