시간의 흐름에 따른 그룹/집단 별 관측값 혹은 비율의 변화를 누적해서 볼 수 있는 그래프가 누적 영역 그래프 (Stacked Area Plot) 입니다. 아마 엑셀에서 많이 보았을 법한 그래프 일것이라고 생각합니다.
2007년부터 2014년까지의 한국 수/출입 무역량 (단위: 1 B$) 데이터를 가지고 수출과 수입으로 구분하여서 ggplot2의 geom_area() 함수를 사용하여 누적 영역 그래프(Stacked Area Plot) 를 그려보도록 하겠습니다.
아래는 2007년부터 2014년까지의 한국 수/출입 무역량 (단위: 1 B$) 데이터를 링크해두었습니다.
(☞ 한국 수/출입 무역량 데이터 다운로드 trade_stat_07_14.csv)
* 출처 : 국가무역통계 KOSIS, http://kosis.kr/statisticsList/statisticsList_01List.jsp?vwcd=MT_ZTITLE&parmTabId=M_01_01#SubCont)
그래프를 그리기에 딱 맞는 형식이 아니므로 csv 데이터를 불러들인 다음에
-> sqldf 패키지를 활용해 Year 단위로 수출입 실적을 집계
-> 이때 단위를 1000$ -> 1B$ 로 바꿔주기 위해 1,000,000 으로 나눠줌
을써 데이터를 필요에 맞게 집계해보겠습니다.
|
여기까지 했는데도 누적 영역 그래프를 그리기에 딱 맞는 데이터 형태가 아니라서 reshape 패키지의 melt() 함수를 사용하여 데이터를 현재의 가로로 늘어져있는 exp_amt_Year, imp_amt_Year 변수를 -> 세로로 세워서 데이터 구조를 변경해보겠습니다.
그 다음에 variable -> trade_cd (수입, 수출 구분 코드), value -> amount_B (무역금액, 단위 : 1B$) 로 변수명을 변경하였습니다.
> # 데이터 구조 녹이기(melt) - 세로로 세우기 > library(reshape) > trade_stat_Year_melt <- melt(trade_stat_Year, idvars = c("Year")) Using Year as id variables > trade_stat_Year_melt Year variable value 1 2007 exp_amt_Year 3714 2 2008 exp_amt_Year 4220 3 2009 exp_amt_Year 3635 4 2010 exp_amt_Year 4663 5 2011 exp_amt_Year 5552 6 2012 exp_amt_Year 5478 7 2013 exp_amt_Year 5596 8 2014 exp_amt_Year 5726 9 2007 imp_amt_Year 3568 10 2008 imp_amt_Year 4352 11 2009 imp_amt_Year 3230 12 2010 imp_amt_Year 4252 13 2011 imp_amt_Year 5244 14 2012 imp_amt_Year 5195 15 2013 imp_amt_Year 5155 16 2014 imp_amt_Year 5255 > > # 변수명 변경 > trade_stat_Year_melt <- rename(trade_stat_Year_melt, c(variable="trade_cd", value="amount_B")) > trade_stat_Year_melt Year trade_cd amount_B 1 2007 exp_amt_Year 3714 2 2008 exp_amt_Year 4220 3 2009 exp_amt_Year 3635 4 2010 exp_amt_Year 4663 5 2011 exp_amt_Year 5552 6 2012 exp_amt_Year 5478 7 2013 exp_amt_Year 5596 8 2014 exp_amt_Year 5726 9 2007 imp_amt_Year 3568 10 2008 imp_amt_Year 4352 11 2009 imp_amt_Year 3230 12 2010 imp_amt_Year 4252 13 2011 imp_amt_Year 5244 14 2012 imp_amt_Year 5195 15 2013 imp_amt_Year 5155 16 2014 imp_amt_Year 5255
|
이제 드디어 누적 영역 그래프를 그릴 데이터 셋 준비가 다 되었군요. ggplot2의 geom_area() 함수를 사용하여 우선 값 기준으로 그리고, 다음으로 비율 기준으로도 그려보겠습니다.
geom_area(colour=NA)로 하고 geom_line(position="stack")으로 해서 양 옆에 선은 트여주고, 영역 간 경계선은 그려주었습니다.
> # 누적 영역 그래프 그리기 > ggplot(trade_stat_Year_melt, aes(x=Year, y=amount_B, fill=trade_cd, group=trade_cd)) + + geom_area(colour=NA, alpha=0.5) + # alpha 투명도 + scale_fill_brewer(palette="Blues") + + geom_line(position="stack", size=0.3) + + ggtitle("Stacked Area Plot of Trade (Import, Export) from 2007 to 2014") ymax not defined: adjusting position using y instead
|
aes(arder=desc()) 를 사용하여 위의 영역 구분 그룹의 순서를 바꿀 수도 있습니다. 위의 예제에서는 exp_amt_Year (수출액)이 아래에 위치했습니다만, 아래 예제에서는 exp_amt_Year(수출액)이 위로 위치가 바뀌었음을 알 수 있습니다.
> # 누적 영역 순서 바꾸기 > library(plyr) # desc() 함수 사용 위해 필요 > ggplot(trade_stat_Year_melt, aes(x=Year, y=amount_B, fill=trade_cd, group=trade_cd, + order=desc(trade_cd))) + # 누적 영역 순서 내림차순 정렬 + geom_area(colour=NA, alpha=0.5) + # alpha 투명도 + scale_fill_brewer(palette="Blues") + + geom_line(position="stack", size=0.3) + + ggtitle("Stacked Area Plot of Trade (Import, Export) from 2007 to 2014") ymax not defined: adjusting position using y instead
|
이번에는 비율 기준으로 해서 누적 영역 그래프를 그려보겠습니다. 이를 위해서는 데이터셋에서 Year 별로 비율을 계산해주어야 합니다. 데이터 프레임에서 사칙연산을 써가면서 transform() 함수로 step-by-step 해나갈 수도 있는데요, plyr패키지의 ddply() 함수를 사용하면 놀랍도록 간편하게 원하는 비율 값을 구할 수 있습니다.
> #----- > # 비율 누적 영역 그래프 그리기 > # 비율 계산하기 > library(plyr) > > trade_stat_Year_melt_prop <- ddply(trade_stat_Year_melt, + "Year", transform, + trade_prop = round(100*amount_B/sum(amount_B),1)) > > trade_stat_Year_melt_prop Year trade_cd amount_B trade_prop 1 2007 exp_amt_Year 3714 51.0 2 2007 imp_amt_Year 3568 49.0 3 2008 exp_amt_Year 4220 49.2 4 2008 imp_amt_Year 4352 50.8 5 2009 exp_amt_Year 3635 52.9 6 2009 imp_amt_Year 3230 47.1 7 2010 exp_amt_Year 4663 52.3 8 2010 imp_amt_Year 4252 47.7 9 2011 exp_amt_Year 5552 51.4 10 2011 imp_amt_Year 5244 48.6 11 2012 exp_amt_Year 5478 51.3 12 2012 imp_amt_Year 5195 48.7 13 2013 exp_amt_Year 5596 52.1 14 2013 imp_amt_Year 5155 47.9 15 2014 exp_amt_Year 5726 52.1 16 2014 imp_amt_Year 5255 47.9
|
위의 trade_prop 변수를 활용해서 비율 누적 영역 그래프(Propostion stacked area plot)을 그려보도록 하겠습니다. 값을 기준으로 했을 때와 script는 동일하며, y값 자리에 trade_prop (수출입 무역 비율) 변수로 바꾸어주기만 하면 됩니다.
그래프 뒤에 단위 격자가 보이도록 geom_area(alpha=0.5) 로 해서 약간 투명하게 처리했습니다.
> # 비율 누적 영역 그래프 그리기 > library(plyr) # desc() 함수 사용 위해 필요 > ggplot(trade_stat_Year_melt_prop, aes(x=Year, y=trade_prop, fill=trade_cd, group=trade_cd, + order=desc(trade_cd))) + # 누적 영역 순서 내림차순 정렬 + geom_area(colour=NA, alpha=0.5) + # alpha 투명도 + scale_fill_brewer(palette="Blues") + + geom_line(position="stack", size=0.3) + + ggtitle("Stacked Area Plot of Trade Proportion (Import, Export) from 2007 to 2014") ymax not defined: adjusting position using y instead
|
많은 도움이 되었기를 바랍니다.
이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡' 단추를 꾸욱 눌러주세요.^^
'R 분석과 프로그래밍 > R 그래프_시각화' 카테고리의 다른 글
R corrplot 상관계수 행렬 Plot (correlation matrix plot) (7) | 2015.09.01 |
---|---|
R ggplot2 막대그래프(Bar Chart) 양수, 음수 색상 다르게 하기 (geom_bar()) (0) | 2015.08.29 |
R ggplot2 클리브랜드 점 그래프(Cleveland dot plot) (geom_point()) (4) | 2015.08.23 |
R ggplot2 이차원 밀도 그래프(2D Density Plot) (stat_density2d()) (0) | 2015.08.23 |
R ggpolt2 선그래프, 시계열그래프 (Line Graph) (geom_line()) (7) | 2015.08.22 |