developer tip

ggplot2에서 범례를 이동하거나 배치하는 방법

optionbox 2020. 12. 9. 08:05
반응형

ggplot2에서 범례를 이동하거나 배치하는 방법


플롯 아래에 범례가있는 ggplot2 플롯을 만들려고합니다.

ggplot2 책은 p 112에서 "범례의 위치와 정당성은 legend.position 테마 설정에 의해 제어되며 값은 오른쪽, 왼쪽, 위쪽, 아래쪽, 없음 (범례 없음) 또는 숫자 위치가 될 수 있습니다"라고 말합니다.

다음 코드는 작동하며 ( "right"가 기본값이므로) 범례 위치로 "none"으로도 작동하지만 "left", "top", "bottom"은 모두 "Error in grid.Call"로 실패합니다. .graphics ( "L_setviewport", pvp, TRUE) : ​​무제한 위치 및 / 또는 뷰포트 크기 "

library(ggplot2)
(myDat <- data.frame(cbind(VarX=10:1, VarY=runif(10)), 
    Descrip=sample(LETTERS[1:3], 10, replace=TRUE)))
qplot(VarX,VarY, data=myDat, shape=Descrip) + 
    opts(legend.position="right")

내가 도대체 ​​뭘 잘못하고있는 겁니까? 범례의 위치를 ​​변경하는 것은 엄청나게 흔해야하므로 나인 것 같습니다.


0.9.3을 초과하는 버전 ( opts사용되지 않는시기)

theme(legend.position = "bottom")

이전 버전 :

불행히도 이것은 ggplot2의 버그인데 이번 여름에 정말 고칠 수 있기를 바랍니다.

최신 정보:

관련 버그 opts(legend.position = "left")는 최신 버전의 ggplot2를 사용하여 수정되었습니다 . 또한 버전 0.9.0 에서는 범례 자체 내에서 항목의 모양과 위치를 훨씬 더 세밀하게 제어 할 수 있는 guide_legend의 도입을 확인 guide_colorbar했습니다. 예를 들어이 기능은 범례 항목의 행과 열 수를 지정합니다.


내가 여기있는 동안이 답변에 대한 몇 가지 업데이트 만 있습니다. Hadley가 언급했듯이 다음을 사용하여 범례를 맨 아래로 이동할 수 있습니다.theme(legend.position = "bottom")

또는 수동으로 이동 theme(legend.position = c(.2,.85))

범례를 수평으로하려면 다음을 사용하십시오. theme(legend.position = c(.2,.85), legend.direction = "horizontal")


항상 수동으로 범례를 배치 할 수 있지만 레이블이 여전히 스택 / 수직이기 때문에 다소보기 흉합니다. 나는 정말로 hadley가 이것을 고칠 시간을 찾기를 바랍니다 :-)

p <- qplot(VarX,VarY, data=myDat, shape=Descrip) + 
opts(legend.position=c(.5,0.9),plot.margin = unit(c(6,0,0,0), "lines"))

새로운 버전에서는 ggplot2, 당신은 사용할 수 있습니다 + theme(legend.position='bottom').

qplot(VarX,VarY, data=myDat, shape=Descrip) + 
  theme(legend.position='bottom')

여기에 이미지 설명 입력

더 많은 레전드의 장점을 보려면 Cookbook for R-Legends참조하십시오 .

주석에 대한 응답으로 theme_update()ggplot 중간에 호출되면 시작되지 않습니다 (에서와 같이 + theme_update()후속 시간에만 해당됩니다. 또한 특정 플롯이 아닌 활성 테마도 수정합니다. 따라서 다음과 같이 할 수 있습니다.

theme_update(legend.position='bottom')
qplot(VarX,VarY, data=myDat, shape=Descrip) 

위와 같은 결과로, 차이점은 후속 플롯도 하단의 범례로 기본 설정된다는 것입니다.

참고 URL : https://stackoverflow.com/questions/2954005/how-to-move-or-position-a-legend-in-ggplot2

반응형