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))
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)
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)
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.
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=2
el 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.