2011-09-26 3 views
8

ggplot2에서이 문제가 계속 발생합니다. 아마도 누군가 나를 도울 수 있습니다.플롯에서 점 순서를 변경하지 않고 범례 재 순서를 변경하십시오.

필자는 범례의 변수 순서가 플롯에 표시되는 방법의 순서와 반대되는 플롯을 사용합니다. 예를 들어

:

df=data.frame(
mean=runif(9,2,3), 
Cat1=rep(c("A","B","C"),3), 
Cat2=rep(c("X","Y","Z"),each=3)) 

dodge=position_dodge(width=1) 
ggplot(df,aes(x=Cat1,y=mean,color=Cat2))+ 
geom_point(aes(shape=Cat2),size=4,position=dodge)+ 
scale_color_manual(values=c("red","blue","black"))+ 
scale_shape_manual(values=c(16:19))+ 
coord_flip() 

는 생산 :

example

그래서 포인트가 CAT2 = Z, Y, 다음 X (블랙 다이아몬드, 블루 삼각형, 빨간색과 플롯에 표시됩니다 원)에 표시되지만 범례에서는 Cat2 = X, Y, Z (빨간색 원, 파란색 삼각형, 검은 색 다이아몬드)로 표시됩니다.

플롯에서 점을 이동하지 않고 어떻게 범례의 순서를 바꿀 수 있습니까? 요인을 재정렬하면 정반대의 문제가 생깁니다 (플롯상의 포인트가 반대로됩니다).

감사합니다.

+2

현재로서는 쉬운 방법이 없을 것입니다. 다음 버전에는 범례를 뒤집을 수있는 옵션이있을 수 있습니다. – kohske

+0

흠, 그 냄새. 알아 둘만한. 머리를 주셔서 감사합니다! – jslefche

+1

스케일'breaks'를 설정하십시오. – hadley

답변

0

지금까지 내가 당신이 달성하고자하는 것을 이해로,이 간단한 조작 나를 위해 트릭을 수행합니다

  1. 가와
  2. CHAGE합니다 (적절한 순서로 레벨) 요소로 CAT2를 정의

    library(ggplot2) 
    
    df=data.frame(
        mean=runif(9,2,3), 
        Cat1=rep(c("A","B","C"),3), 
        Cat2=factor(rep(c("X","Y","Z"),each=3), levels=c('Z', 'Y', 'X'))) 
    
    dodge=position_dodge(width=1) 
    ggplot(df,aes(x=Cat1,y=mean,color=Cat2))+ 
        geom_point(aes(shape=Cat2),size=4,position=dodge)+ 
        scale_color_manual(values=c("black","blue","red"))+ 
        scale_shape_manual(values=c(18:16))+ 
        coord_flip() 
    
    :합니다 (scale_manual 명령에) 수준의 순서와 일치하는 색상과 모양의 순서 여기

그것을 할 수있는 코드

+0

아아, 내가 질문의 끝에 묻어 서, 요인을 뒤집 으면 범례가 바뀌지 만 플롯의 점도 바뀝니다 (빨간색 원이 먼저 나타납니다). 플롯에서 점의 순서를 유지하지만 전설을 역전시키고 싶습니다. 나는 당신의 솔루션을 사용했고 단지 첫 번째 음모에 범례를 복사했습니다. 우아하지 않지만,해야 할 것입니다. 통찰력을 모두 주셔서 감사합니다! – jslefche

3

은 해들리의 발언을 구체화하기 위해, 우리는 같은 것을 할 것입니다 : 우리가 모두 규모에 휴식을 설정했다

ggplot(df,aes(x=Cat1,y=mean,color=Cat2))+ 
geom_point(aes(shape=Cat2),size=4,position=dodge)+ 
scale_color_manual(values=c("red","blue","black"),breaks = c('Z','Y','X'))+ 
scale_shape_manual(values=c(16:19),breaks = c('Z','Y','X'))+ 
coord_flip() 

enter image description here

참고. 우리가 하나만했다면, 그들은 일치하지 않을 것이고, ggplot은 그들을 합치기보다는 두 개의 전설로 나눌 것입니다.

+0

수동 저울이 여러 개인 경우 'scale_fill_manual','scale_color_manual', 그리고'scale_shape_manual'과 같이 레이블을 바꾸기를 원할 경우, 모든 레이블에 동일한 레이블을 제공해야합니다. 이것은 지루할 수 있습니다 (6 개의 긴 레이블이있는 6 개의 변수가 있다고 가정). 다른 방법은 없지, 그렇지? – PatrickT

관련 문제