Saltar al contenido

geom_text ¿cómo colocar el texto en la barra como quiero?

Esta es el arreglo más completa que encomtrarás aportar, pero estúdiala detenidamente y analiza si se adapta a tu proyecto.

Solución:

Editar:

La solución más fácil de conseguir hjust/vjust comportarse inteligentemente es añadir la group estética a geom_text y luego hjust & position ajustar para el group automáticamente.

1. Orientación Vertical

ggplot(data) + 
  geom_bar(
    aes(x = name, y = count, fill = week, group = week), 
    stat='identity', position = 'dodge'
  ) +
  geom_text(
    aes(x = name, y = count, label = count, group = week),
    position = position_dodge(width = 1),
    vjust = -0.5, size = 2
  ) + 
  theme_bw()

Esto da:

ingrese la descripción de la imagen aquí

2. Orientación Horizontal

ggplot(data) + 
  geom_bar(
    aes(x = name, y = count, fill = week, group = week), 
    stat='identity', position = 'dodge'
  ) +
  geom_text(
    aes(x = name, y = count, label = count, group = week), 
    hjust = -0.5, size = 2,
    position = position_dodge(width = 1),
    inherit.aes = TRUE
  ) + 
  coord_flip() + 
  theme_bw()

Esto da:

ingrese la descripción de la imagen aquí


Esta no es necesariamente la forma más general de hacerlo, pero puede tener una fill dependiente hjust (o vjust, dependiendo de la orientación) variable. No me queda del todo claro cómo seleccionar el valor del parámetro de ajuste, y actualmente se basa en qué aspecto derecho. Quizás alguien más pueda sugerir una forma más general de elegir el valor de este parámetro.

1. Orientación Vertical

library(dplyr)
library(ggplot2)

# generate some data
data = data_frame(
  week = as.factor(rep(c(1, 2), times = 5)),
  name = as.factor(rep(LETTERS[1:5], times = 2)),
  count = rpois(n = 10, lambda = 20),
  hjust = if_else(week == 1, 5, -5),
  vjust = if_else(week == 1, 3.5, -3.5)
)

# Horizontal
ggplot(data) + 
  geom_bar(
    aes(x = name, y = count, fill = week, group = week), 
    stat='identity', position = 'dodge'
  ) +
  geom_text(
    aes(x = name, y = count, label = count, vjust = vjust), 
    hjust = -0.5, size = 2,
    inherit.aes = TRUE
  ) + 
  coord_flip() + 
  theme_bw() 

Esto es lo que parece:

ingrese la descripción de la imagen aquí

2. Orientación Horizontal

ggplot(data) + 
  geom_bar(
    aes(x = name, y = count, fill = week, group = week), 
    stat='identity', position = 'dodge'
  ) +
  geom_text(
    aes(x = name, y = count, label = count, vjust = vjust), 
    hjust = -0.5, size = 2,
    inherit.aes = TRUE
  ) + 
  coord_flip() + 
  theme_bw()

Esto es lo que parece:

ingrese la descripción de la imagen aquí

Él position_dodge() declaración toma un parámetro de ancho. Para asegurarse de que el texto esté centrado al final de las barras (es decir, el ancho de sobreexposición para las barras y el texto sea el mismo), asigne el mismo parámetro de ancho al position_dodge() declaración dentro geom_bar y dentro geom_text.

También hay un parámetro de ancho para geom_bar, ese es el ancho de las barras. Si desea que las barras se topen entre sí dentro de cada name, haga que el ancho de la barra sea el mismo que el ancho de sobreexposición; si desea un pequeño espacio entre las barras, haga que el ancho de la barra sea un poco menor que el ancho de esquivar.

Si utiliza la estética global, no necesitará un group estético (sin embargo, si usa solo estética local, necesitará una estética de grupo para geom_text).

hjust = -0.5 colocará las etiquetas de texto justo más allá del final de las barras; hjust = 1.5 las coloca dentro del final de las barras.

library(ggplot2)

# Generate some data - using @tchakravarty's data - Thanks.
df = data.frame(
  week = as.factor(rep(c(1, 2), times = 5)),
  name = as.factor(rep(LETTERS[1:5], times = 2)),
  count = rpois(n = 10, lambda = 20))

position = position_dodge(width = .75)
width = .75

ggplot(df, aes(x = name, y = count, label = count, fill = week)) + 
  geom_bar(width = width, stat='identity', position = position) +
  geom_text(hjust = -0.5, size = 2, position = position) +
  coord_flip() + 
  theme_bw()



# To separate the bars slightly:
position = position_dodge(width = .75)
width = .65

ggplot(df, aes(x = name, y = count, label = count, fill = week)) + 
  geom_bar(width = width, stat='identity', position = position) +
  geom_text(hjust = -0.5, size = 2, position = position) +
  coord_flip() + 
  theme_bw()

Sección de Reseñas y Valoraciones

Recuerda que tienes la capacidad de agregar una reseña si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *