2012-03-28 5 views
4

필자는 ggplot2에서 점으로 그려지는 데이터 포인트 세트로 구성된 그래프를 만들었고, 맞는 모델로 예측 된 라인은 겹쳐졌다. 당신이 볼 수 있듯이한 포인트 항목과 한 줄 항목으로 ggplot2에서 범례를 만들려면 어떻게해야합니까?

names <- c(1,1,1,2,2,2,3,3,3) 
xvals <- c(1:9) 
yvals <- c(1,2,3,10,11,12,15,16,17) 
pvals <- c(1.1,2.1,3.1,11,12,13,14,15,16) 
ex_data <- data.frame(names,xvals,yvals,pvals) 
ex_data$names <- factor(ex_data$names) 

graph <- ggplot(data=ex_data, aes(x=xvals, y=yvals, color=names)) 
print(graph + geom_point() + geom_line(aes(x=xvals, y=pvals))) 

, 선과 점을 모두가 범주 형 변수 (이 경우 '이름')에 의해 착색되어 그래프의 일반적인 생각은 다음과 같이 보인다. 전설에는 2 개의 항목이 포함되어 있습니다. '데이터'라는 점과 'Fitted'라는 줄이 있습니다 (점이 실제 데이터이고 선이 맞는 것을 나타냄). 그러나, 나는 이것을 작동시킬 수 없다. (최고) 가이드 here 서식에 좋은 곳입니다 만, 즉

print(graph + scale_colour_manual("", values=c("green", "blue", "red")) 
+ scale_shape_manual("", values=c(19,NA,NA)) 
+ scale_linetype_manual("",values=c(0,1,1))) 

주요 문제는 내가 아무 소용이 기술 here을 시도하면서, 실제 항목을 처리하지 않고, 나의 실제 데이터에 , '이름'에 대해> 200 개의 카테고리가 있으며, 전설에서 언급 한 2 가지 항목 만 필요합니다. 내 실제 데이터로이 작업을 수행하면 범례가 색상 (너무 많은 것을 가지고 있음)의 키가 되려고하기 때문에 페이지에서 실행되는 의미없는 범례 만 생성됩니다.

도움을 주시면 감사하겠습니다.

답변

4

나는이 당신이 원하는에 가까운 생각 :

ggplot(ex_data, aes(x=xvals, group=names)) + 
    geom_point(aes(y=yvals, shape='data', linetype='data')) + 
    geom_line(aes(y=pvals, shape='fitted', linetype='fitted')) + 
    scale_shape_manual('', values=c(19, NA)) + 
    scale_linetype_manual('', values=c(0, 1)) 

아이디어 당신이 그것을 위해, 말, 말이 없어도, 선, 점 모두 두 미학 (linetypeshape)을 지정할 수 있다는 것입니다 요점은 linetype입니다. 그런 다음 이러한 "넌센스"미학을 수동 스케일을 사용하여 "null"값 (이 경우 NA0)으로 수동 매핑합니다.

+0

고마워요! 나는 그것이 지금 어떻게 작동하는지 알아 낸다. [this] (http://stackoverflow.com/questions/5423105/how-to-remove-an-aesthetic-from-a-ggplot2-legend)와 결합하여 색상에 대한 범례를 표시하지 않으면 효과가 좋습니다! 편집 : 다른 사람이이 작업을 시도하는 경우, 나는 미적으로 범례를 표시하지 않는 링크 된 게시물의 주석을 언급하고 있습니다 - scale_color_something (..., guide = 'none') - 분명히 범례 = F가 사용되지 않습니다. . – blake

1

이것은 이미 답변되었지만 다른 질문 (How can I fix this strange behavior of legend in ggplot2?)으로이 비틀기가 다른 사람들에게 도움이 될 수 있으며 두통을 줄일 수 있습니다 (이전 답변에 대한 의견으로 남길 수 없음) :

ggplot(ex_data, aes(x=xvals, group=names)) + 
    geom_point(aes(y=yvals, shape='data', linetype='data')) + 
    geom_line(aes(y=pvals, shape='fitted', linetype='fitted')) + 
    scale_shape_manual('', values=c('data'=19, 'fitted'=NA)) + 
    scale_linetype_manual('', values=c('data'=0, 'fitted'=1)) 
관련 문제