2013-05-17 2 views
0

ggplot2의 범례에 문제가있어서 부탁드립니다. 여기 내 전설 라벨은이 경우 단순화 된 경우ggplot2의 범례와 관련된 문제

library(ggplot2) 
library(datasets) 

bp <- ggplot(data=PlantGrowth, aes(x=group, y=weight, fill=group, color=group)) + geom_boxplot() 

bp +scale_fill_manual(values=c("#999999", "#E69F00", "#56B4E9"), 
         name="Experimental\nCondition", 
         breaks=c("ctrl", "trt1", "trt2"), 
         labels=c("legend 1", "legend 2", "legend 3")) + 
    scale_color_manual(values=c("black", "red", "green"), 
        name="Experimental\nCondition", 
        breaks=c("ctrl", "trt1", "trt2"), 
        labels=c("legend 1", "legend 2", "legend 3")) 

이다 : 나는 동일한 레이블을하고 싶은, 이제 '전설 1 ","전설 2 "와"전설 3 "

내 전설 : "전설 1"(여전히 3 개의 전설 상자 포함). 명확하게 지금부터, 나는 9 전설의 상자를 가지고 있기 때문에 내가 원하는 것이 아니다,

bp <- ggplot(data=PlantGrowth, aes(x=group, y=weight, fill=group, color=group)) + geom_boxplot() 

bp +scale_fill_manual(values=c("#999999", "#E69F00", "#56B4E9"), 
         name="Experimental\nCondition", 
         breaks=c("ctrl", "trt1", "trt2"), 
         labels=c("legend 1", "legend 1", "legend 1")) + 
    scale_color_manual(values=c("black", "red", "green"), 
        name="Experimental\nCondition", 
        breaks=c("ctrl", "trt1", "trt2"), 
        labels=c("legend 1", "legend 1", "legend 1")) 

그러나 : 그래서 내 코드입니다. 그러므로 내 질문은 : 그러한 경우 어떻게 3 개의 상자 (각 상자 플롯에 대해 하나씩)를 가진 전설을 가질 수 있습니까? 그러나 전설에 대한 레이블은 동일 할 수 있습니까? 게다가 왜 ggplot2가 제 코드를 이렇게 취급합니까?

나를 도울 수 있다면 많이 도와주세요! 도움 주셔서 감사합니다. 실례합니다. 영어 실력이 부족합니다. 실제로 나는 모국어가 아닙니다.

+0

, 그것을 채울 알고하지 않고, 색이 어떤 라벨을 얻어야한다 .. 나는 가정한다. 따라서 모든 조합을 제공합니다. 어쨌든 모든 레이블이 동일 할 때 전설을 갖는 것이 합리적이지 않습니까? – Arun

+0

아룬 질문을 제외하고 (내가 가지고있는) 'scale_color_manual'에'guide = "none"'을 설정할 수도 있습니다. 그러나 범례에서는 범례 기호에 그 윤곽선 색을 전혀 적용하지 않을 것입니다. – joran

+0

먼저 답변 해 주셔서 감사합니다. 아룬, 예. 하지만 사실 내 문제는 그것보다 복잡합니다. 사실 나는 일부 레이블만으로 전설을 보여줘야합니다. 문제는 여전히 동일합니다. –

답변

1

ggplot이 전설을 어떻게 결합했는지에 따라 문제가 발생한다고 생각합니다. 제목과 레이블이 같은 경우 결합 할 수 있습니다. 중복 레이블이 주어지면 효과적으로 외부 조인 (가능한 모든 조합의 조합)이 만들어지는 병합이 있다고 생각합니다.

bp <- ggplot(data=PlantGrowth, aes(x=group, y=weight, fill=group, color=group)) + geom_boxplot() 
bp +scale_fill_manual(values=c("#999999", "#E69F00", "#56B4E9"), 
         name="Experimental\nCondition", 
         breaks=c("ctrl", "trt1", "trt2"), 
         labels=c("legend 1", "legend 1 ", "legend 1 ")) + 
    scale_color_manual(values=c("black", "red", "green"), 
        name="Experimental\nCondition", 
        breaks=c("ctrl", "trt1", "trt2"), 
        labels=c("legend 1", "legend 1 ", "legend 1 ")) 

그래서 당신이 동일하지 않은 레이블을 가지고 있지만, 이는 같은 모양 :이이 문제를 해결하는 올바른 방법이지만, 여기에 작동하는 해킹이 있는지 확실하지 않습니다. 레이블이 고유하지 때문에

enter image description here

+0

Brian Diggs의 답변과 트릭에 대해 감사드립니다. 따라서이 동작을 피할 방법이 없습니다. –

+0

나는 그 행동을 피하는 방법을 모른다. 나는 라벨이 독특하다는 암묵적인 가정이 있다고 상상한다. 왜냐하면 그들이 독특하지 않다면 왜 다른 미학이 필요한가?) 그래서 이것은 직접적으로 피할 수있는 것이 아닐 것이다. –

+0

OK, 다시 한번 감사드립니다. Brian Diggs –