Coloque geom_text en el diagrama de barras esquivado

Resuelto aL3xa asked hace 54 años • 1 respuestas

Intenté que el título se explicara por sí mismo, pero aquí va: los datos primero:

dtf <- structure(list(variable = structure(c(1L, 1L, 2L, 2L, 3L, 3L, 
4L, 4L, 5L, 5L), .Label = c("vma", "vla", "ia", "fma", "fla"), class = "factor"), 
    ustanova = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
    2L), .Label = c("srednja škola", "fakultet"), class = "factor"), 
    `(all)` = c(42.9542857142857, 38.7803203661327, 37.8996138996139, 
    33.7672811059908, 29.591439688716, 26.1890660592255, 27.9557692307692, 
    23.9426605504587, 33.2200772200772, 26.9493087557604)), .Names = c("variable", 
"ustanova", "(all)"), row.names = c(NA, 10L), class = c("cast_df", 
"data.frame"), idvars = c("variable", "ustanova"), rdimnames = list(
    structure(list(variable = structure(c(1L, 1L, 2L, 2L, 3L, 
    3L, 4L, 4L, 5L, 5L), .Label = c("vma", "vla", "ia", "fma", 
    "fla"), class = "factor"), ustanova = structure(c(1L, 2L, 
    1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L), .Label = c("srednja škola", 
    "fakultet"), class = "factor")), .Names = c("variable", "ustanova"
    ), row.names = c("vma_srednja škola", "vma_fakultet", "vla_srednja škola", 
    "vla_fakultet", "ia_srednja škola", "ia_fakultet", "fma_srednja škola", 
    "fma_fakultet", "fla_srednja škola", "fla_fakultet"), class = "data.frame"), 
    structure(list(value = structure(1L, .Label = "(all)", class = "factor")), .Names = "value", row.names = "(all)", class = "data.frame")))

Y me gustaría crear un diagrama de barras esquivado, hacer coord_flipy colocar algunas etiquetas de texto dentro de las barras:

ggplot(bar) + geom_bar(aes(variable, `(all)`, fill = ustanova), position = "dodge") +
 geom_text(aes(variable, `(all)`, label = sprintf("%2.1f", `(all)`)), position = "dodge") +
 coord_flip()

Puedes ver el resultado aquí .

ingrese la descripción de la imagen aquí

Supongo que estoy pidiendo algo trivial. Quiero que las etiquetas de texto "sigan" las barras apiladas. Las etiquetas se colocan correctamente en el eje y, pero ¿cómo colocarlas correctamente en el eje x?

aL3xa avatar Jan 01 '70 08:01 aL3xa
Aceptado

¿Es esto lo que quieres?

library(ggplot2)

ggplot(bar) + 
  geom_col(aes(variable, `(all)`, fill = ustanova), position = "dodge") +
  geom_text(aes(variable, `(all)`, label = sprintf("%2.1f", `(all)`), group = ustanova), 
            position = position_dodge(width = .9)) +
  coord_flip()

La clave es position = position_dodge(width = .9)(donde .9está el ancho predeterminado de las barras) en lugar de position = "dodge", que es solo un atajo sin ningún parámetro. Además, debe configurar la group=ustanovaestética geom_textpara evitar las etiquetas ustanova(una segunda opción sería crear fill = ustanovauna estética global a través deggplot(bar, aes(fill = ustanova))


En ggplot2_2.0.0encontrará varios ejemplos sobre ?geom_textcómo posicionar geom_textbarras esquivadas o apiladas (el fragmento de código denominado " # Aligning labels and bars"). Las preguntas y respuestas ¿ Cuál es el argumento de ancho en position_dodge? proporciona una descripción más detallada del tema.

kohske avatar May 16 '2011 13:05 kohske