Saltar al contenido

¿Qué hacen hjust y vjust al hacer un diagrama usando ggplot?

Este enunciado ha sido evaluado por nuestros especialistas así aseguramos la veracidad de este ensayo.

Solución:

El valor de hjust y vjust solo se definen entre 0 y 1:

  • 0 significa justificado a la izquierda
  • 1 significa justificado a la derecha

Fuente: ggplot2, Hadley Wickham, página 196

(Sí, sé que en la mayoría de los casos puede usarlo más allá de este rango, pero no espere que se comporte de ninguna manera específica. Esto está fuera de las especificaciones).

hjust controla la justificación horizontal y vjust controla la justificación vertical.

Un ejemplo debería dejar esto claro:

td <- expand.grid(
    hjust=c(0, 0.5, 1),
    vjust=c(0, 0.5, 1),
    angle=c(0, 45, 90),
    text="text"
)

ggplot(td, aes(x=hjust, y=vjust)) + 
    geom_point() +
    geom_text(aes(label=text, angle=angle, hjust=hjust, vjust=vjust)) + 
    facet_grid(~angle) +
    scale_x_continuous(breaks=c(0, 0.5, 1), expand=c(0, 0.2)) +
    scale_y_continuous(breaks=c(0, 0.5, 1), expand=c(0, 0.2))

ingrese la descripción de la imagen aquí


Para entender lo que sucede cuando cambia el hjust en el texto del eje, debe comprender que la alineación horizontal para el texto del eje se define en relación no con el eje x, sino con todo el gráfico (donde esto incluye el texto del eje y). (En mi opinión, esto es desafortunado. Sería mucho más útil tener la alineación relativa al eje).

DF <- data.frame(x=LETTERS[1:3],y=1:3)
p <- ggplot(DF, aes(x,y)) + geom_point() + 
    ylab("Very long label for y") +
    theme(axis.title.y=element_text(angle=0))


p1 <- p + theme(axis.title.x=element_text(hjust=0)) + xlab("X-axis at hjust=0")
p2 <- p + theme(axis.title.x=element_text(hjust=0.5)) + xlab("X-axis at hjust=0.5")
p3 <- p + theme(axis.title.x=element_text(hjust=1)) + xlab("X-axis at hjust=1")

library(ggExtra)
align.plots(p1, p2, p3)

ingrese la descripción de la imagen aquí


Para explorar lo que sucede con vjust alineación de las etiquetas de los ejes:

DF <- data.frame(x=c("ana","b","cdefghijk","l"),y=1:4)
p <- ggplot(DF, aes(x,y)) + geom_point()

p1 <- p + theme(axis.text.x=element_text(vjust=0, colour="red")) + 
        xlab("X-axis labels aligned with vjust=0")
p2 <- p + theme(axis.text.x=element_text(vjust=0.5, colour="red")) + 
        xlab("X-axis labels aligned with vjust=0.5")
p3 <- p + theme(axis.text.x=element_text(vjust=1, colour="red")) + 
        xlab("X-axis labels aligned with vjust=1")


library(ggExtra)
align.plots(p1, p2, p3)

ingrese la descripción de la imagen aquí

Probablemente el más definitivo es Figura B.1(d) del libro ggplot2, cuyos apéndices están disponibles en http://ggplot2.org/book/appendices.pdf.

ingrese la descripción de la imagen aquí

Sin embargo, no es tan simple. hjust y vjust como se describe, hay cómo funciona en geom_text y theme_text (a veces). Una forma de pensar en ello es pensar en un cuadro alrededor del texto, y dónde está el punto de referencia en relación con ese cuadro, en unidades relativas al tamaño del cuadro (y, por lo tanto, diferente para textos de diferentes tamaños). Un hjust de 0.5 y un vjust de 0,5 centre la caja en el punto de referencia. Reduciendo hjust mueve el cuadro a la derecha por una cantidad de veces el ancho del cuadro 0.5-hjust. Así cuando hjust=0, el borde izquierdo del cuadro está en el punto de referencia. Creciente hjust mueve el cuadro hacia la izquierda una cantidad de veces el ancho del cuadro hjust-0.5. Cuándo hjust=1, el cuadro se mueve medio ancho de cuadro hacia la izquierda desde el centro, lo que coloca el borde derecho en el punto de referencia. Si hjust=2el borde derecho del cuadro es un ancho de cuadro a la izquierda del punto de referencia (el centro es 2-0.5=1.5 anchos de caja a la izquierda del punto de referencia. Para vertical, menos es arriba y más es abajo. Esto es efectivamente lo que dice la Figura B.1(d), pero se extrapola más allá [0,1].

Pero, a veces esto no funciona. Por ejemplo

DF <- data.frame(x=c("a","b","cdefghijk","l"),y=1:4)
p <- ggplot(DF, aes(x,y)) + geom_point()

p + opts(axis.text.x=theme_text(vjust=0))
p + opts(axis.text.x=theme_text(vjust=1))
p + opts(axis.text.x=theme_text(vjust=2))

Las tres últimas parcelas son idénticas. No sé por qué es eso. Además, si se rota el texto, entonces es más complicado. Considerar

p + opts(axis.text.x=theme_text(hjust=0, angle=90))
p + opts(axis.text.x=theme_text(hjust=0.5 angle=90))
p + opts(axis.text.x=theme_text(hjust=1, angle=90))
p + opts(axis.text.x=theme_text(hjust=2, angle=90))

El primero tiene las etiquetas justificadas a la izquierda (contra la parte inferior), la segunda las tiene centradas en algún cuadro para que sus centros se alineen, y la tercera las tiene justificadas a la derecha (para que sus lados derechos se alineen junto al eje). El último, bueno, no puedo explicarlo de manera coherente. Tiene algo que ver con el tamaño del texto, el tamaño del texto más ancho y no estoy seguro de qué más.

Te mostramos las comentarios y valoraciones de los lectores

Recuerda recomendar esta sección si lograste el éxito.

¡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 *