Agradecemos tu ayuda para extender nuestros artículos acerca de las ciencias informáticas.
Solución:
Hay varias formas de evitar el trazado excesivo de etiquetas o apretar el área de trazado o mejorar la legibilidad en general. Cuál de las soluciones propuestas es la más adecuada dependerá de las longitudes de las etiquetas y del número de barras, y de otros factores. Entonces, probablemente tendrás que jugar.
Datos ficticios
Desafortunadamente, el OP no ha incluido un ejemplo reproducible, por lo que tenemos que inventar nuestros propios datos:
V1 <- c("Long label", "Longer label", "An even longer label",
"A very, very long label", "An extremely long label",
"Long, longer, longest label of all possible labels",
"Another label", "Short", "Not so short label")
df <- data.frame(V1, V2 = nchar(V1))
yaxis_label <- "A rather long axis label of character counts"
Gráfico de barras "estándar"
Las etiquetas en el eje x se imprimen en posición vertical, superponiéndose entre sí:
library(ggplot2) # version 2.2.0+
p <- ggplot(df, aes(V1, V2)) + geom_col() + xlab(NULL) +
ylab(yaxis_label)
p
Tenga en cuenta que el agregado recientemente geom_col()
en lugar de geom_bar(stat="identity")
esta siendo usado.
Enfoque de OP: rotar etiquetas
Las etiquetas en el eje x se giran 90° grados, comprimiendo el área de trazado:
p + theme(axis.text.x = element_text(angle = 90))
gráfico de barras horizontales
Todas las etiquetas (incluida la etiqueta del eje Y) se imprimen en posición vertical, lo que mejora la legibilidad pero aún aprieta el área de trazado (pero en menor medida ya que el gráfico está en formato horizontal):
p + coord_flip()
Gráfico de barras verticales con etiquetas envueltas
Las etiquetas se imprimen en posición vertical, lo que evita el trazado excesivo y reduce la compresión del área de trazado. Puede que tengas que jugar un poco con el width
parámetro a stringr::str_wrap
.
q <- p + aes(stringr::str_wrap(V1, 15), V2) + xlab(NULL) +
ylab(yaxis_label)
q
Gráfico de barras horizontales con etiquetas envueltas
Mi enfoque favorito: todas las etiquetas se imprimen en posición vertical, lo que mejora la legibilidad y reduce la compresión del área de trazado. Una vez más, puede que tenga que jugar un poco con el width
parámetro a stringr::str_wrap
para controlar el número de líneas en las que se dividen las etiquetas.
q + coord_flip()
Apéndice: Abrevie las etiquetas usando scale_x_discrete()
En aras de la exhaustividad, debe mencionarse que ggplot2
es capaz de abreviar etiquetas. En este caso, el resultado me parece decepcionante.
p + scale_x_discrete(labels = abbreviate)
Para aclarar, lo que esta pregunta parece estar preguntando es cómo especificar el tamaño del panel en ggplot2.
Creo que la respuesta correcta a esta pregunta es 'simplemente no puedes hacer eso'.
En este momento, no parece haber ningún parámetro que pueda configurarse en ninguna función de ggplot2 que logre esto. Si hubiera uno, creo que lo más probable sería en forma de height
y width
argumentos a un element_rect
llamar dentro de una llamada a theme
(que es cómo hacemos otros cambios en el panel, por ejemplo, alterando su color de fondo), pero no hay nada parecido a los de los documentos para element_rect
así que mi mejor suposición es que especificar el tamaño del panel es imposible:
https://ggplot2.tidyverse.org/reference/element.html
La siguiente referencia es antigua, pero no puedo encontrar nada más actualizado que confirme positivamente si este es el caso o no:
https://groups.google.com/forum/#!topic/ggplot2/nbhph_arQ7E
En esa discusión, alguien pregunta si es posible especificar el tamaño del panel y Hadley responde: "Todavía no, pero está en mi lista de tareas pendientes". Eso fue hace nueve años; Supongo que todavía está en su lista de tareas pendientes.
Reseñas y puntuaciones de la guía
Te invitamos a añadir valor a nuestra información colaborando tu experiencia en las anotaciones.