2014-07-11 3 views
1

라인 그룹을 플롯하고 범례에서이 라인에 하나의 라벨을 지정하려고합니다. 다음은 현재 사용중인 데이터 (df2)의 예입니다.ggplot의 라인 그룹에 대한 범례

structure(list(
true = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), 
.Label = c("model1", "model2"), class = "factor"), 
test = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L), 
.Label = c("false.model1", "false.model2", "false.model3", "true model"), class = "factor"), 
est.interval = c(0, 5, 5, 7, 7, 10, 10, 11, 11, 0, 2, 2, 3, 3, 0, 2, 2, 4, 4, 0, 2, 2, 3, 3, 4, 4, 0, 7, 7, 10, 10, 13, 13, 0, 4, 4, 5, 5, 0, 5, 5, 6, 6, 7, 7, 9, 9, 0, 2, 2, 3, 3, 4, 4), 
sens = c(1, 1, 0.75, 0.75, 0.5, 0.5, 0.25, 0.25, 0, 1, 1, 0.25, 0.25, 0, 1, 1, 0.5, 0.5, 0, 1, 1, 0.5, 0.5, 0.25, 0.25, 0, 1, 1, 0.75, 0.75, 0.25, 0.25, 0, 1, 1, 0.5, 0.5, 0, 1, 1, 0.75, 0.75, 0.5, 0.5, 0.25, 0.25, 0, 1, 1, 0.5, 0.5, 0.25, 0.25, 0)), 
.Names = c("true", "test", "est.interval", "sens"), 
class = "data.frame") 

그리고 여기서 ggplot을 사용하여 곡선을 그립니다.

ggplot(df2, aes(x=est.interval, y=sens, color=test)) + 
    ylim(0,1) + 
    geom_line(size = 0.6) + 
    facet_wrap(~true, nrow=1) + 
    scale_colour_manual(values=c(rep('#CCCCCC', 3), "#000000"), name="Estimation Model") + 
    guides(color=guide_legend(keywidth = 3, keyheight = 1)) 

나는 음모에 개별적으로 보이는 세 회색 "false.model"곡선을 가지고 싶지만 범례에 내가 한 회색 라인 옆에 하나 "거짓 모델"항목을 원한다. 이 작업을 수행하는 방법에 대한 의견이 있으십니까?

+0

당신의 예를 들어이 만드는 얻기 위해 할 수있는 복사/붙여 넣기를 통해 R로 가져 오기가 매우 어렵습니다. 샘플 데이터의'dput()'을 포함하는 것이 더 낫다. 더 좋은 점은 우리에게'df2'를 주면 그것이 여러분이 원하는 것입니다. 어떻게 그 데이터를 만드는지는 무의미합니다. 표시되는대로 플롯을 생성하는 코드가 없어도 제안을 제공하는 것은 어렵습니다. – MrFlick

+0

감사합니다. 제안 된 수정 사항을 코드에 제공했습니다. – user2220537

+0

이것은 훨씬 더 도움이됩니다. 감사. – MrFlick

답변

1

dput에 문제가 있습니다. 그것은 잘못된 dat.frame 만든 rownames 것 같았다. 수정 된 덤프 여기

df2 <- structure(list(true = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("model1", 
"model2"), class = "factor"), test = structure(c(1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 
2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L), .Label = c("false.model1", "false.model2", "false.model3", 
"true model"), class = "factor"), est.interval = c(0, 5, 5, 7, 
7, 10, 10, 11, 11, 0, 2, 2, 3, 3, 0, 2, 2, 4, 4, 0, 2, 2, 3, 
3, 4, 4, 0, 7, 7, 10, 10, 13, 13, 0, 4, 4, 5, 5, 0, 5, 5, 6, 
6, 7, 7, 9, 9, 0, 2, 2, 3, 3, 4, 4), sens = c(1, 1, 0.75, 0.75, 
0.5, 0.5, 0.25, 0.25, 0, 1, 1, 0.25, 0.25, 0, 1, 1, 0.5, 0.5, 
0, 1, 1, 0.5, 0.5, 0.25, 0.25, 0, 1, 1, 0.75, 0.75, 0.25, 0.25, 
0, 1, 1, 0.5, 0.5, 0, 1, 1, 0.75, 0.75, 0.5, 0.5, 0.25, 0.25, 
0, 1, 1, 0.5, 0.5, 0.25, 0.25, 0)), .Names = c("true", "test", 
"est.interval", "sens"), row.names = c(NA, -54L), class = "data.frame") 

가장 쉬운 방법은 색칠에 사용할 수있는 새로운 요소를 만드는 것입니다. 예 :

df2$testcol<-factor(ifelse(df2$test=="true model",1,2), 
    levels=1:2, 
    labels=c("True Model","False Model")) 

이제 모든 거짓 모델은 공통 값을 공유합니다. 그럼 당신은

ggplot(df2, aes(x=est.interval, y=sens, group=test, colour=testcol)) + 
    ylim(0,1) + 
    geom_line(size = 0.6) + 
    facet_wrap(~true, nrow=1) + 
    scale_colour_manual(values=c("True Model"='#CC0000', 
     "False Model"="#999999"), name="Estimation Model") + 
    guides(color=guide_legend(keywidth = 3, keyheight = 1)) 

가 가

enter image description here

실행 가능한 일하기 위해 true.models.testCase``등의 변수 누락, 플러스 data.values의 공간입니다