Giá trị của hjust
và vjust
chỉ được xác định trong khoảng từ 0 đến 1:
- 0 có nghĩa là trái
- 1 có nghĩa là đúng
Nguồn: ggplot2, Hadley Wickham, trang 196
(Vâng, tôi biết rằng trong hầu hết các trường hợp, bạn có thể sử dụng nó vượt quá phạm vi này, nhưng đừng mong đợi nó hoạt động theo bất kỳ cách cụ thể nào. Đây là thông số bên ngoài.)
hjust
kiểm soát biện minh ngang và vjust
kiểm soát biện minh dọc.
Một ví dụ cần làm rõ điều này:
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))
Để hiểu điều gì xảy ra khi bạn thay đổi hjust
văn bản trục, bạn cần hiểu rằng căn chỉnh ngang cho văn bản trục được xác định không liên quan đến trục x, mà là toàn bộ cốt truyện (trong đó bao gồm văn bản trục y). (Điều này, theo quan điểm của tôi, thật không may. Sẽ hữu ích hơn nhiều nếu có sự liên kết so với trục.)
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)
Để khám phá những gì xảy ra với vjust
việc dán nhãn trục:
DF <- data.frame(x=c("a\na","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)