원형그래프는 좌표계를 각도와 길이로 표현하는 극좌표계를 이용하여 그리는 그래프이다. coord_polar()함수를 사용하여 극좌표계로 바꿀 수 있다.
acs 데이타를 사용하여 진단명(Dx)에 따른 막대 그래프를 그려보자. 사용할 데이타에 acs를 입력하고(1) x축 변수에 Dx(2), fill변수에 Dx를 할당하고(3) geometry options중 bar 체크박스를 선택한다(4). 이때 막대 사이의 간격을 없애기 위해 bar의 width 인수를 1로 설정하자(5).
require(moonBook) # acs 데이타 샤용을 위해
require(ggplot2) # ggplot()사용을 위해
ggplot(acs,aes(x=Dx,fill=Dx))+ # 데이타/변수 할당
geom_bar(width=1) # 히스토그램
화면 오른쪽의 원형 그래프 그리기체크박스를 선택하면(화살표) 원형그래프가 그려진다. 막대 그래프가 아닌 세그멘트 다이아그램이 그려졌다.
ggplot(acs,aes(x=Dx,fill=Dx))+ # 데이타/변수 할당
geom_bar(width=1)+ # 히스토그램
coord_polar() # 원형그래프
세그멘트 다이아그램이 익숙하지 않은 경우 익숙한 파이그래프로도 그릴 수 있다. 일단 원형 그래프 그리기체크박스를 선택해제한다(1). x축 변수에 Dx 대신 1을 선택하고(2) 범주형 변수로 취급 체크박스를 선택한다(3). 누적 막대그래프가 그려진다.
ggplot(acs,aes(x=factor(1),fill=Dx))+
geom_bar(width=1)
다시 화면 오른쪽의 원형 그래프 그리기체크박스를 선택하면(화살표) Bull’s Eye 챠트가 그려진다.
ggplot(acs,aes(x=factor(1),fill=Dx))+
geom_bar(width=1)+
coord_polar()
극 좌표계의 theta값은 각도를 의미한다. theta의 기본 값은 “x”로 되어 있다. 이를 “y”로 바꾸면 파이 챠트가 그려진다.
ggplot(acs,aes(x=factor(1),fill=Dx))+
geom_bar(width=1)+
coord_polar(theta='y')
gcookbook에 포함되어 있는 wind 데이타는 2012년 2월 29일 시카고에서 측정한 바람의 속도와 방향에 관한 데이타이다. 변수/옵션 초기화 버튼을 누르고(다홍색 화살표) 사용할 데이타에 wind를 입력하면 표가 나타난다.
바람의 평균방향은 DirCat에 저장 되어 있고 바람의 평균 속도는 SpeedCat에 저장되어 있다. 바람의 방향과 속도를 히스토그램으로 나타내기 위해 x축변수에 DirCat(1), fill변수에 SpeedCat 를 할당하고(2) geomatry options 중 bar 체크박스를 선택한다(3). 바람의 방향을 0도에서 360도로 분간하기 위해 x축 범위를 0,360으로 입력한다(4).
require(gcookbook)
ggplot(wind,aes(x=DirCat,fill=SpeedCat))+
geom_bar()+
xlim(0,360)
원형 그래프 그리기체크박스를 선택하면(화살표) 원형그래프가 그려진다. 색상 팔레트를 Blues를 선택하고 막대의 테두리를 그리기 위해 bar()의 color인수를 “black”으로 설정하면 우리가 그리고자 했던 그래프가 완성된다.
coord_polar()함수의 기타 인수에는 direction이 있는데 이는 도형의 배치를 시계방향(1)과 반시계방향(-1)으로 결정할 수 있으며 start는 그래프가 시작하는 각도를 라디안으로 정할수 있다(즉 90도는 \(\pi\)/2, 360도가 2 \(\pi\) 가 된다.).
R 명령어를 써서 이 그래프를 그리기 위해서는 다음 명령어를 사용하면 된다.
require(gcookbook) # 데이타 wind의 사용을 위해
require(ggplot2) # ggplot()의 사용을 위해
ggplot(wind,aes(x=DirCat,fill=SpeedCat))+ # 데이타, 변수의 할당
geom_bar(colour='black')+ # 막대그래프 그림
scale_fill_brewer(palette='Blues')+ # 팔레트 설정
coord_polar()+ # 극좌표계 설정
guides(fill=guide_legend(reverse=TRUE))+ # 범례순서 반대로
scale_x_continuous(limits=c(0,360),breaks=seq(0,360,by=45)) # 축을 0-360로