2011-08-30 5 views
10

저는 R로 플롯을 만들고 일부 값이 투영 인 선을 만들어야합니다. 투영은 점선으로 표시됩니다. 여기 코드는 다음과 같습니다 ggplot2에서 부분 파선 만들기

df = data.frame(date=c(rep(2008:2013, by=1)), 
       value=c(303,407,538,696,881,1094)) 


ggplot(df, aes(date, value, width=0.64)) + 
     geom_bar(stat = "identity", fill="#336699", colour="black") + 
     ylim(c(0,1400)) + opts(title="U.S. Smartphone Users") + 
     opts(axis.text.y=theme_text(family="sans", face="bold")) + 
     opts(axis.text.x=theme_text(family="sans", face="bold")) + 
     opts(plot.title = theme_text(size=14, face="bold")) + 
     xlab("Year") + ylab("Users (in millions)") +   
     opts(axis.title.x=theme_text(family="sans")) + 
     opts(axis.title.y=theme_text(family="sans", angle=90)) + 
     geom_segment(aes(x=2007.6, xend=2013, y=550, yend=1350), arrow=arrow(length=unit(0.4,"cm"))) 

그래서 나는 2008 그러나, 나는 2008 년부터 2011 년까지 실선을 원하는 2013 년에 확장 라인, 그리고 끝으로 2011 년 점선을 만들었습니다. 난 그냥 두 개의 별도 라인 세그먼트, 또는 내가 원하는 결과를 얻을 수있는 별도의 명령이 있습니다.

답변

20

철학은 간단합니다. 플롯의 각 요소는 다른 레이어에 있어야합니다. 따라서 서로 다른 행 유형에서 두 개의 선분을 얻으려면 두 개의 geom_segment 문이 필요합니다.

다른 기간 동안 geom_bar과 동일한 원리로 다른 색상으로 설명합니다.

ggplot(df[df$date<=2011, ], aes(date, value, width=0.64)) + 
    geom_bar(stat = "identity", fill="#336699", colour="black") + 
    geom_bar(data=df[df$date>2011, ], aes(date, value), 
     stat = "identity", fill="#336699", colour="black", alpha=0.5) + 
    ylim(c(0,1400)) + opts(title="U.S. Smartphone Users") + 
    opts(
     axis.text.y=theme_text(family="sans", face="bold"), 
     axis.text.x=theme_text(family="sans", face="bold"), 
     plot.title = theme_text(size=14, face="bold"), 
     axis.title.x=theme_text(family="sans"), 
     axis.title.y=theme_text(family="sans", angle=90) 
    ) + 
    xlab("Year") + ylab("Users (in millions)") +   
    geom_segment(aes(x=2007.6, xend=2011, y=550, yend=1050), linetype=1) + 
    geom_segment(aes(x=2011, xend=2013, y=1050, yend=1350), 
     arrow=arrow(length=unit(0.4,"cm")), linetype=2) 

enter image description here

관련 문제