2012-03-02 4 views
8

플롯의 범례를 2로 분할하여 첫 번째 3 개의 요소가 네 번째 요소와 약 1 줄의 간격으로 분리되도록하려는 경우. 나는 처음에 단지 1 요소 앞에 줄 휴식을 추가하려고 :R 플롯의 범례

legend("topright",col=1,lty=1:3,lwd=1,legend=c("leg1","leg2","\nleg3"), bty="n") 

하지만이 inbetween 격차를 증가시키는 것 모두 요소 (이 문서화 된 동작입니다?)

그때 2를 사용 별도의 범례, 국경을 "n"으로 설정하고 lines()을 사용하여 국경을 재구성하십시오 (부수적으로 말하자면, 범례의 테두리 1 개만 표시하는 방법이 있습니까?). 이 방법이 효과가 있지만 inset 값으로 많은 시행 착오가 필요합니다. insetlegend()에서의

기본값은 c(0,0)하지만 이들은 분명 그 전설의 요소의 텍스트 길이에 따라, legend()에 대한 초기 호출 조정받을. ?legend에 따르면 legend() 호출의 값은

"길이 길이 (범례)의 숫자 벡터이며 범례 텍스트의 x 및 y 좌표를 제공합니다."를 포함합니다.

어쨌든 이것은 두 번째 범례의 요소가 정렬되도록 두 번째 호출의 inset에 대한 적절한 값으로 변환 될 수 있습니까?

답변

22

공백을 원할 때 인수에 NA 만 지정하면됩니다. 모든 범례 인수를 벡터로 제공해야합니다. 당신이 세밀하게 제어를위한 legend() 2 개 통화를 인수에 trace=TRUE을 지정하려는 그것은 당신에게 X를 반환하고 경우

enter image description here

set.seed(2) 
    plot(0:10, rnorm(11), col = sample(c("green", "blue"), 11, replace = TRUE), 
     pch = sample(c(3, 19), 11, replace = TRUE), xlim = c(0, 12)) 
    legend("topright", pch = c(3, 19, NA, 3, 19), 
     col = c("green", "green", NA, "blue", "blue"), 
     legend = c("green cross", "green dot", NA, "blue cross", "blue dot")) 

는 다른 방법으로, Y는 당신이 필요로 조정합니다.

+0

감사합니다. 훨씬 쉽게 만들었습니다. – ChrisW