Pie plot과 Donut plot의 결합
문건웅
2016년 5월 8일
목표
일반적으로 파이그래프는 자료를 표현하는데 있어 그리 좋은 방법은 아닌 것으로 알려져 있다. 특히 자료의 갯수가 많아 질 경우 파이그래프보다 donut 그래프가 더 좋은 것으로 알려져 있다. 이번 글의 목표는 파이그래프와 donut plot을 결합하여 보기 좋은 그래프를 만드는 것이다. 다음과 같은 자료가 있다고 하자.
browsers=read.csv("browsers.csv")
browsers
browser version share
1 MSIE MSIE 6.0 10.85
2 MSIE MSIE 7.0 7.35
3 MSIE MSIE 8.0 33.06
4 MSIE MSIE 9.0 2.81
5 Firefox Firefox 3.5 1.58
6 Firefox Firefox 3.6 13.12
7 Firefox Firefox 4.0 5.43
8 Chrome Chrome 10.0 9.91
9 Safari Safari 4.0 1.42
10 Safari Safari 5.0 4.55
11 Opera Opera 11.x 1.65
이때 이 자료를 이용하여 다음과 같은 그래프를 그리고자 한다.

또는 필자가 만든 moonBook package에 있는 acs 데이타를 이용하여 진단명과 흡연여부를 나타내보면 다음과 같다. 
일반적으로 파이그래프는 자료를 표현하는데 있어 그리 좋은 방법은 아닌 것으로 알려져 있다. 특히 자료의 갯수가 많아 질 경우 파이그래프보다 donut 그래프가 더 좋은 것으로 알려져 있다. 이번 글의 목표는 파이그래프와 donut plot을 결합하여 보기 좋은 그래프를 만드는 것이다. 다음과 같은 자료가 있다고 하자.
browsers=read.csv("browsers.csv")
browsers
browser version share
1 MSIE MSIE 6.0 10.85
2 MSIE MSIE 7.0 7.35
3 MSIE MSIE 8.0 33.06
4 MSIE MSIE 9.0 2.81
5 Firefox Firefox 3.5 1.58
6 Firefox Firefox 3.6 13.12
7 Firefox Firefox 4.0 5.43
8 Chrome Chrome 10.0 9.91
9 Safari Safari 4.0 1.42
10 Safari Safari 5.0 4.55
11 Opera Opera 11.x 1.65
이때 이 자료를 이용하여 다음과 같은 그래프를 그리고자 한다.
또는 필자가 만든 moonBook package에 있는 acs 데이타를 이용하여 진단명과 흡연여부를 나타내보면 다음과 같다.
Donut plot 의 구현
먼저 Pie plot과 Donut plot을 비교해보자. ggplot2의 geom_rect()및 coord_polar()를 이용하면 간단하게 그릴 수 있다. geom_rect()를 이용하려면 ymin, ymax, xmin, xmax 좌표를 지정해주어야 한다. 이를 위하여 먼저 다음과 같이 자료를 전처리한다.
dat1<-browsers
dat1$ymax<-cumsum(dat1$share)
dat1$ymin<-cumsum(dat1$share)-dat1$share
dat1$ypos<-dat1$ymin+dat1$share/2
dat1$ratio<-dat1$share*100/sum(dat1$share)
dat1
browser version share ymax ymin ypos ratio
1 MSIE MSIE 6.0 10.85 10.85 0.00 5.425 11.828191
2 MSIE MSIE 7.0 7.35 18.20 10.85 14.525 8.012646
3 MSIE MSIE 8.0 33.06 51.26 18.20 34.730 36.040554
4 MSIE MSIE 9.0 2.81 54.07 51.26 52.665 3.063338
5 Firefox Firefox 3.5 1.58 55.65 54.07 54.860 1.722446
6 Firefox Firefox 3.6 13.12 68.77 55.65 62.210 14.302845
7 Firefox Firefox 4.0 5.43 74.20 68.77 71.485 5.919546
8 Chrome Chrome 10.0 9.91 84.11 74.20 79.155 10.803445
9 Safari Safari 4.0 1.42 85.53 84.11 84.820 1.548021
10 Safari Safari 5.0 4.55 90.08 85.53 87.805 4.960209
11 Opera Opera 11.x 1.65 91.73 90.08 90.905 1.798757
먼저 Pie plot과 Donut plot을 비교해보자. ggplot2의 geom_rect()및 coord_polar()를 이용하면 간단하게 그릴 수 있다. geom_rect()를 이용하려면 ymin, ymax, xmin, xmax 좌표를 지정해주어야 한다. 이를 위하여 먼저 다음과 같이 자료를 전처리한다.
dat1<-browsers
dat1$ymax<-cumsum(dat1$share)
dat1$ymin<-cumsum(dat1$share)-dat1$share
dat1$ypos<-dat1$ymin+dat1$share/2
dat1$ratio<-dat1$share*100/sum(dat1$share)
dat1
browser version share ymax ymin ypos ratio
1 MSIE MSIE 6.0 10.85 10.85 0.00 5.425 11.828191
2 MSIE MSIE 7.0 7.35 18.20 10.85 14.525 8.012646
3 MSIE MSIE 8.0 33.06 51.26 18.20 34.730 36.040554
4 MSIE MSIE 9.0 2.81 54.07 51.26 52.665 3.063338
5 Firefox Firefox 3.5 1.58 55.65 54.07 54.860 1.722446
6 Firefox Firefox 3.6 13.12 68.77 55.65 62.210 14.302845
7 Firefox Firefox 4.0 5.43 74.20 68.77 71.485 5.919546
8 Chrome Chrome 10.0 9.91 84.11 74.20 79.155 10.803445
9 Safari Safari 4.0 1.42 85.53 84.11 84.820 1.548021
10 Safari Safari 5.0 4.55 90.08 85.53 87.805 4.960209
11 Opera Opera 11.x 1.65 91.73 90.08 90.905 1.798757
Pie Plot
먼저 geom_rect()를 이용하여 막대그래프를 만들어보자.
require(ggplot2)
p<-ggplot(dat1)+geom_rect(aes(xmin=3,xmax=4,ymin=ymin,ymax=ymax,fill=version))
p

이제 coord_polar()를 이용하여 좌표계를 원형좌표계로 변환한다. 양궁에서 쓰이는 과녁과 비슷한 Buul’s eye plot이 그려진다.
p+coord_polar()

이를 Pie plot으로 변환하려면 coord_polar의 theta옵션을 “y”로 주면 된다.
p+coord_polar(theta="y")

이 그래프를 Donut plot으로 바꾸는 것은 x축의 좌표의 범위만 바꾸어 주면 된다.
p+coord_polar(theta="y")+xlim(0,4)

먼저 geom_rect()를 이용하여 막대그래프를 만들어보자.
require(ggplot2)
p<-ggplot(dat1)+geom_rect(aes(xmin=3,xmax=4,ymin=ymin,ymax=ymax,fill=version))
p
이제 coord_polar()를 이용하여 좌표계를 원형좌표계로 변환한다. 양궁에서 쓰이는 과녁과 비슷한 Buul’s eye plot이 그려진다.
p+coord_polar()
이를 Pie plot으로 변환하려면 coord_polar의 theta옵션을 “y”로 주면 된다.
p+coord_polar(theta="y")
이 그래프를 Donut plot으로 바꾸는 것은 x축의 좌표의 범위만 바꾸어 주면 된다.
p+coord_polar(theta="y")+xlim(0,4)