Tengo un diagrama donde el eje x es un factor cuyas etiquetas son largas. Aunque probablemente no sea una visualización ideal, por ahora me gustaría simplemente rotar estas etiquetas para que sean verticales. He descubierto esta parte con el código a continuación, pero como puede ver, las etiquetas no son totalmente visibles.
data(diamonds)
diamonds$cut <- paste("Super Dee-Duper",as.character(diamonds$cut))
q <- qplot(cut,carat,data=diamonds,geom="boxplot")
q + opts(axis.text.x=theme_text(angle=-90))
q + theme(axis.text.x=element_text(angle = -90, hjust = 0))
theme(axis.text.x=element_text(angle = 90, vjust = 0.5))
. A partir de ggplot2 0.9.3.1, esta parece ser la solución.q + theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))
ES EL QUE FUNCIONA ACTUALMENTE.theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))
da buenos resultadosPara hacer que el texto en las etiquetas de marca sea totalmente visible y leído en la misma dirección que la etiqueta del eje y, cambie la última línea a
fuente
Utilizar
coord_flip()
En el capítulo 3.9 de R para Data Science , Wickham y Grolemund hablan de esta pregunta exacta:
fuente
Me gustaría proporcionar una solución alternativa, se requería una solución robusta similar a lo que estoy a punto de proponer en la última versión de ggtern , desde que introduje la función de rotación del lienzo.
Básicamente, debe determinar las posiciones relativas mediante trigonometría, mediante la construcción de una función que devuelva un
element_text
objeto, dado el ángulo (es decir, grados) y la información de posicionamiento (es decir, una de x, y, arriba o derecha).Francamente, en mi opinión, creo que una opción 'automática' debería estar disponible
ggplot2
para los argumentoshjust
yvjust
, al especificar el ángulo, de todos modos, demostremos cómo funciona lo anterior.Lo que produce lo siguiente:
fuente
rads = (-angle - positions[[ position ]])*pi/180
produjo mejores ubicaciones. Tenga en cuenta el signo menos adicional antes del ángulo. Gracias por el código de todos modos :)El paquete ggpubr ofrece un acceso directo que hace lo correcto de forma predeterminada (alinear el texto a la derecha, alinear el cuadro de texto del medio para marcar):
Creado el 06/11/2018 por el paquete reprex (v0.2.1)
Encontrado con una búsqueda de GitHub para los nombres de argumentos relevantes: https://github.com/search?l=R&q=element_text+angle+90+vjust+org%3Acran&type=Code
fuente
Alternativamente,
ggplot 3.3.0
proporcionaguide_axis(n.dodge = 2)
(comoguide
argumentoscale_..
o comox
argumento paraguides
) superar el problema de sobre-trazado esquivando las etiquetas verticalmente. Funciona bastante bien en este caso:fuente
Para obtener etiquetas de tick x legibles sin dependencias adicionales, desea utilizar:
Esto gira las etiquetas de marca 90 ° en sentido antihorario y las alinea verticalmente en su extremo (
hjust = 1
) y sus centros horizontalmente con la marca de marca correspondiente (vjust = 0.5
).Ejemplo completo:
Tenga en cuenta que los parámetros
vjust
/hjust
de justificación vertical / horizontalelement_text
son relativos al texto. Por lo tanto,vjust
es responsable de la horizontal alineación .Sin
vjust = 0.5
esto se vería así:Sin
hjust = 1
esto se vería así:Si por alguna razón (por cable) desea girar las etiquetas de marca 90 ° en sentido horario (de modo que se puedan leer desde la izquierda), necesitaría usar:
q + theme(axis.text.x = element_text(angle = -90, vjust = 0.5, hjust = -1))
.Todo esto ya se ha discutido en los comentarios de esta respuesta, pero vuelvo a esta pregunta con tanta frecuencia que quiero una respuesta que pueda copiar sin leer los comentarios.
fuente
Una alternativa a
coord_flip()
es usar elggstance
paquete. La ventaja es que facilita la combinación de los gráficos con otros tipos de gráficos y puede, quizás lo más importante, establecer proporciones de escala fija para su sistema de coordenadas .Creado el 11-03-2020 por el paquete reprex (v0.3.0)
fuente