2013-05-14 1 views
2

:그래프 당 하나의 범례를 유지하면서 색상 및 모양을 결합 된 선 및 점 도면에서 변경할 수 있습니까? 다음 데이터 프레임을 사용

day <- gl(8,1,48,labels=c("Mon","Tues","Wed","Thurs","Fri","Sat","Sun","Avg")) 
day <- factor(day, level=c("Mon","Tues","Wed","Thurs","Fri","Sat","Sun","Avg")) 
month<-gl(3,8,48,labels=c("Jan","Mar","Apr")) 
month<-factor(month,level=c("Jan","Mar","Apr")) 

snow<-gl(2,24,48,labels=c("Y","N")) 
snow<-factor(snow,levels=c("Y","N")) 
count <-c(.94,.95,.96,.98,.93,.94,.99,.9557143,.82,.84,.83,.86,.91,.89,.93,.8685714,1.07,.99,.86,1.03,.81,.92,.88,.9371429,.94,.95,.96,.98,.93,.94,.99,.9557143,.82,.84,.83,.86,.91,.89,.93,.8685714,1.07,.99,.86,1.03,.81,.92,.88,.9371429) 
d <- data.frame(day=day,count=count,month=month,snow=snow) 

나는 다음과 같은 그래프에 월별로 그룹화 선과 점의 색상과 모양 변경하려면 :

library(ggplot2) 
library(scales) 

ggplot(data=d[d$day=="Avg",],aes(x=day, y=count, fill=month,group=month,label=month),show_guide=F)+ 
facet_wrap(~snow,ncol=1,scales="free")+ 
geom_line(data=d[d$day!="Avg",],aes(x=day, y=count, group=month, colour=month), show_guide=F)+ 
scale_x_discrete(limits=levels(d$day))+ 
scale_y_continuous(labels = percent)+ 
geom_point(aes(colour = month),size = 4,position=position_dodge(width=1.2))+ 
expand_limits(y=0) 

enter image description here

  1. 선 그래프와 점 모두의 색상과 모양을 변경하면 어떻게됩니까? 아직 월 단위로 그룹화되어 있습니까?

참고 : (당신이 grid.arrange를 사용하지 않고 각 그래프에 대한 전설을 만드는 방법을 알아낼 수 있다면 보너스 포인트를) 적절한 모양/색상 그래프 당 하나의 전설이 요구되고있다.

+0

이해가 안됩니다. 'scale_colour_ *'함수가 작동하지 않습니까? 그리고 다른 어떤 것과 마찬가지로 단순히 '모양'미학을 설정하려 했습니까? 왜 두 개의 전설이 필요하겠습니까?전설은 동일 할 것이다. – joran

+0

내 실제 데이터 세트에는 27 개가 넘는 그래프가 있습니다. 따라서 전체 집합에 대한 하나의 범례는 읽기가 어렵습니다. 또한 scale_colour_ *와 모양을 미적으로 사용해보십시오. 내가 왜 질문을하는지 알게 될거야. 색상/모양은 개별 점이나 선을 변경하지만 둘 다를 동시에 변경하지는 않습니다. 달의 색상/모양은 점과 선 모두에서 동일해야합니다. 이해해 주셔서 감사합니다. – blehman

+3

이것은 여전히 ​​의미가 없습니다. 당신은 색 미학을 사용하고있을 것입니다. 대신에 당신은'채우기'를 사용하고있는 것처럼 보입니다. 이 문제를 해결하면 'scale_colour_ *'가 정상적으로 작동합니다. 그리고 모양을 미적으로 설정하면 모양이 잘 바뀝니다. 네가 무슨 말하는지 모르겠다. – joran

답변

3

나는 @thunk가 맞다고 생각하지만, 코드에 더 많은 문제가 있습니다. (1) fill을 지정했지만 fill을 사용하는 기하 구조는 사용하지 마십시오. (2) 첫 번째 ggplot에 기본 미학을 설정하면 geom에서 불필요하게 재설정 할 수 있습니다. (3) 도형을 바꾸고 싶지만 도형을 결코 지정하지 마십시오.

나는 이것이 당신이 원하는 것을 제공합니다 생각 : 초기 ggplot()에서 처음으로 aes 전화에서

ggplot(data=d[d$day=="Avg",], 
     aes(x=day, y=count, color=month, group=month, 
      label=month, shape = month), show_guide=F)+ 
    facet_wrap(~snow, ncol=1, scales="free")+ 
    geom_line(data=d[d$day!="Avg", ])+ 
    scale_x_discrete(limits=levels(d$day))+ 
    scale_y_continuous(labels = percent)+ 
    geom_point(size = 4, position = position_dodge(width=1.2))+ 
    scale_color_manual(values = c("dodgerblue4", "firebrick4", "forestgreen")) + 
    expand_limits(y=0) 

fixed plot

우리가 colorshape 모두가 달에 따라 다를 수 있음을 지정합니다. 그런 다음 geom_linegeom_point 호출에서 우리는 다시 그렇게 말할 필요가 없습니다. scale_color_manual()을 추가하면 원하는 색상을 선택할 수 있습니다 (도형을 지정하려면 scale_shape_manual()을 추가하면됩니다).

희망이 도움이됩니다.

2

내가 생각하는 당신이 당신의 그래프 생성에 다음 줄을 추가하여 달성 할 수 수행 할 작업 : 여기에

+ scale_colour_manual(values = c("yellow","pink", "brown")) 

당신이 당신의 라인과 포인트를 갖고 싶어 어느 색상 척 할 수 있습니다.

http://docs.ggplot2.org/current/scale_manual.html

는 그러나 일반적으로, 당신이 반드시 데이터를 묘사하지 않는 생산 그래프는 가장 유용한에 있다고 생각 : 동일한는 등 문서에 대해 자세히 살펴보고 scale_shape_manual 수행 할 수 있습니다 그리고 접근 가능한 방법. 이 그래프가 실제로 원하는 것을 다시 생각해보십시오. 값이 실제로 평일의 평균이므로이 평균이 실제로 선형 순서로 시간적으로 연결되어 있지 않으므로 요일과 줄을 연결하면 재검토하는 것이 좋습니다. 그리고 평균을 같은 그래프에 넣으면 (다른 날처럼) 약간의 혼란이 생길 ​​것이라고 생각합니다. 그러나 더 큰 그림을 알지 못합니다 ...