ggplot을 사용하여 플롯을 만들 때마다 hjust와 vjust에 대해 다른 값을 시도하는 동안 약간의 시간을 소비합니다.
+ opts(axis.text.x = theme_text(hjust = 0.5))
축 레이블이 축과 거의 닿는 위치에 정렬되고 축과 맞 닿아있는 위치 (축에 맞게 정렬 됨)를 정렬합니다. 그러나 나는 무슨 일이 일어나고 있는지 정말로 이해하지 못한다. 종종, hjust = 0.5
에서와 같은 극적으로 다른 결과를 얻을 수 있습니다 hjust = 0.6
예를 들어, 내가 그것을 알아낼 수 없었던 것을 단지 다른 값으로 장난에 의해.
누구든지 hjust 및 vjust 옵션의 작동 방식에 대한 포괄적 인 설명을 알려줄 수 있습니까?
답변
hjust
및 의 값은 vjust
0과 1 사이에서만 정의됩니다.
- 0은 왼쪽 정렬됨을 의미합니다
- 1은 오른쪽 정렬됨을 의미합니다
출처 : ggplot2, Hadley Wickham, 196 페이지
(예, 대부분의 경우이 범위를 넘어서 사용할 수는 있지만 특정 방식으로 작동 할 것으로 기대하지는 않습니다. 이것은 사양을 벗어납니다.)
hjust
수평 자리 맞추기를 vjust
제어하고 수직 자리 맞추기를 제어합니다.
예를 들어 이것을 분명히해야합니다.
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))
hjust
축 텍스트 를 변경할 때 발생하는 상황을 이해하려면 축 텍스트의 가로 정렬이 x 축이 아니라 전체 플롯 (여기에는 y 축 텍스트 포함)과 관련하여 정의된다는 것을 이해해야합니다. (제 생각에 이것은 불행한 일입니다. 축을 기준으로 정렬하는 것이 훨씬 더 유용합니다.)
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)
vjust
축 레이블 연결로 발생하는 상황을 탐색하려면 다음을 수행하십시오.
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)
답변
아마도 가장 결정적인 부분은 ggplot2 서적의 그림 B.1 (d) 이며, 부록은 http://ggplot2.org/book/appendices.pdf 에서 볼 수 있습니다 .
그러나 그렇게 간단하지는 않습니다. hjust
와 vjust
같은 그것이 어떻게 작동하는지가 설명 geom_text
하고 theme_text
(때로는). 그것을 생각하는 한 가지 방법은 텍스트 주위의 상자와 상자의 크기에 상대적인 단위로 상자와 관련된 기준점이있는 위치를 생각하는 것입니다 (따라서 크기가 다른 텍스트의 경우). hjust
0.5 및 vjust
0.5 중심 기준점의 상자. 줄이면 hjust
상자 너비 시간만큼 상자가 오른쪽으로 이동합니다 0.5-hjust
. 따라서이면 hjust=0
상자의 왼쪽 모서리가 기준점에 있습니다. 증가 hjust
하면 상자 너비의 양만큼 상자가 왼쪽으로 이동하고 상자hjust-0.5
. 언제hjust=1
상자가 가운데에서 왼쪽으로 상자 너비의 절반으로 이동하여 참조 점에 오른쪽 가장자리가 표시됩니다. 인 경우 hjust=2
상자의 오른쪽 모서리는 기준점의 왼쪽 상자 너비입니다 (중앙은 기준점의 2-0.5=1.5
왼쪽 상자 너비입니다. 세로의 경우 위가 적고 많을수록 아래로). )는 말하지만 [0,1]을 넘어서 외삽합니다.
그러나 때로는 이것이 작동하지 않습니다. 예를 들어
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))
후자의 3 가지 도표는 동일합니다. 왜 그런지 모르겠습니다. 또한 텍스트가 회전되면 더 복잡합니다. 치다
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))
첫 번째 레이블은 왼쪽에 정렬 된 레이블이 있고 두 번째 레이블은 일부 상자의 가운데에 정렬되어 가운데가 정렬되고 세 번째 레이블이 오른쪽에 정렬됩니다 (오른쪽이 축 옆에 정렬 됨). 마지막으로, 일관된 방법으로 설명 할 수 없습니다. 텍스트의 크기, 가장 넓은 텍스트의 크기와 관련이 있으며 다른 것이 무엇인지 잘 모르겠습니다.