developer tip

ggplot2 범례 표시 순서 제어

copycodes 2020. 11. 11. 20:18
반응형

ggplot2 범례 표시 순서 제어


ggplot2에서 범례 순서를 제어 할 수있는 방법을 아는 사람이 있습니까?

내가 볼 수 있듯이 순서는 스케일 선언 순서가 아니라 실제 스케일 레이블과 관련이 있습니다. 스케일 제목을 변경하면 순서가 변경됩니다. 이것을 강조하기 위해 다이아몬드 데이터 세트를 사용하여 작은 예를 만들었습니다. 일련의 플롯에 ggplot2를 사용하려고하는데 하나의 변수가 모두 오른쪽에 나타나도록 만들고 싶습니다. 현재 이것은 일부에서만 발생하며 적절한 스케일 레이블을 유지하면서 원하는 주문을 적용하는 방법을 잃어 버렸습니다.

library(ggplot2)
diamond.data <- diamonds[sample(nrow(diamonds), 1000), ]
plot <- ggplot(diamond.data, aes(carat, price, colour = clarity, shape = cut)) +
  geom_point() + opts(legend.position = "top", legend.box = "horizontal")
plot # the legend will appear shape then colour 
plot + labs(colour = "A", shape = "B") # legend will be colour then shape
plot + labs(colour = "Clarity", shape = "Cut") # legend will be shape then colour

0.9.1에서 범례의 순서를 결정하는 규칙은 비밀 이며 예측할 수 없습니다 . 이제 0.9.2, github의 dev 버전에서 매개 변수를 사용하여 범례 순서를 설정할 수 있습니다.

다음은 그 예입니다.

plot <- ggplot(diamond.data, aes(carat, price, colour = clarity, shape = cut)) +
  geom_point() + opts(legend.position = "top")

plot + guides(colour = guide_legend(order = 1), 
              shape = guide_legend(order = 2))

여기에 이미지 설명 입력

plot + guides(colour = guide_legend(order = 2), 
              shape = guide_legend(order = 1))

여기에 이미지 설명 입력


전설의 순서는 스케일 이름의 문자 수에 의해 결정되는 것 같습니다. (예, 동의합니다. 이상하게 보입니다.)

따라서 해결 방법은 레이블을 공백으로 채우는 것입니다.

plot + labs(colour = "Clarity", shape = "      Cut")

여기에 이미지 설명 입력


누군가가 곧 적절한 해결책을 게시하기를 진심으로 바랍니다!

참고 URL : https://stackoverflow.com/questions/11393123/controlling-ggplot2-legend-display-order

반응형