[r] ggplot을 사용하여 플롯을 만들 때 hjust와 vjust는 무엇을합니까?

ggplot을 사용하여 플롯을 만들 때마다 hjust와 vjust에 대해 다른 값을 시도하는 동안 약간의 시간을 소비합니다.

+ opts(axis.text.x = theme_text(hjust = 0.5))

축 레이블이 축과 거의 닿는 위치에 정렬되고 축과 맞 닿아있는 위치 (축에 맞게 정렬 됨)를 정렬합니다. 그러나 나는 무슨 일이 일어나고 있는지 정말로 이해하지 못한다. 종종, hjust = 0.5에서와 같은 극적으로 다른 결과를 얻을 수 있습니다 hjust = 0.6예를 들어, 내가 그것을 알아낼 수 없었던 것을 단지 다른 값으로 장난에 의해.

누구든지 hjust 및 vjust 옵션의 작동 방식에 대한 포괄적 인 설명을 알려줄 수 있습니까?



답변

hjust및 의 값은 vjust0과 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 에서 볼 수 있습니다 .

여기에 이미지 설명을 입력하십시오

그러나 그렇게 간단하지는 않습니다. hjustvjust같은 그것이 어떻게 작동하는지가 설명 geom_text하고 theme_text(때로는). 그것을 생각하는 한 가지 방법은 텍스트 주위의 상자와 상자의 크기에 상대적인 단위로 상자와 관련된 기준점이있는 위치를 생각하는 것입니다 (따라서 크기가 다른 텍스트의 경우). hjust0.5 및 vjust0.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))

첫 번째 레이블은 왼쪽에 정렬 된 레이블이 있고 두 번째 레이블은 일부 상자의 가운데에 정렬되어 가운데가 정렬되고 세 번째 레이블이 오른쪽에 정렬됩니다 (오른쪽이 축 옆에 정렬 됨). 마지막으로, 일관된 방법으로 설명 할 수 없습니다. 텍스트의 크기, 가장 넓은 텍스트의 크기와 관련이 있으며 다른 것이 무엇인지 잘 모르겠습니다.


답변