메뉴 건너뛰기

웹에서 하는 R 통계

Rose plot with ggplot2

2016.05.10 10:38

cardiomoon 조회 수:753

통계마당에 올라온 김지형선생님의 plot http://statistics4everyone.blogspot.kr/2016/05/nightingale-rose-plot.html을 R의 ggplot2로 다시 그려보았습니다. 사용한 데이타는 다음과 같습니다.

data=read.csv("untitled.csv")
data
           X  A    B  C   D  E   F  G
1    January 10  9.0  8 7.0  6 5.0  4
2   February  5  4.5  4 3.5  3 2.5  2
3      March  7  6.0  5 4.0  3 2.0  2
4      April  9  7.0  8 7.0  6 5.0  4
5        May 11  8.0  4 3.5  3 2.5  2
6       June 13  9.0  5 4.0  3 2.0  2
7       July 15 10.0  8 7.0  6 5.0  4
8     August 17 11.0  4 3.5  3 2.5  2
9  September 19 12.0  5 4.0  3 2.0  2
10   October 21 13.0  8 7.0  6 5.0  4
11  November 23 14.0  4 3.5  3 2.5  2
12  December 25 15.0  5 4.0  3 2.0  2
13           NA   NA NA  NA NA  NA NA
14           NA   NA NA  NA NA  NA NA
15           NA   NA NA  NA NA  NA NA
16           NA   NA NA  NA NA  NA NA
17           NA   NA NA  NA NA  NA NA
18           NA   NA NA  NA NA  NA NA
19           NA   NA NA  NA NA  NA NA
20           NA   NA NA  NA NA  NA NA
21           NA   NA NA  NA NA  NA NA

데이타를 이용하여 그림을 그리려면 행과 열을 바꾸고 long form으로 변환해주어야 합니다.

require(reshape2)

data=data[1:12,]
data1=data.frame(t(data))
data2=data1[2:8,]
colnames(data2)=month.name
data2$group=row.names(data2)
data3=melt(data2,id="group")
data3$value=as.numeric(data3$value)
head(data3)
  group variable value
1     A  January    10
2     B  January     9
3     C  January     8
4     D  January     7
5     E  January     6
6     F  January     5

먼저 bar plot을 그린후 coord_polar()로 변환해주는 것이 이해하기 쉽습니다.

require(ggplot2)
ggplot(data=data3,aes(x=variable,y=value,fill=group))+
        geom_bar(stat="identity")

색깔 palette 중 “Greens”를 적용해보면 다음과 같습니다.

ggplot(data=data3,aes(x=variable,y=value,fill=group))+
        geom_bar(stat="identity")+
        scale_fill_brewer(palette="Greens")+xlab("")+ylab("")

coord_polar()를 이용하여 좌표축을 원형 좌표계로 변환시킵니다.

ggplot(data=data3,aes(x=variable,y=value,fill=group))+
        geom_bar(stat="identity")+
        coord_polar()+
        scale_fill_brewer(palette="Greens")+xlab("")+ylab("")

가독성을 좋게 하기 위해 bar의 width, colour 인수를 조절한 완성된 plot입니다.

ggplot(data=data3,aes(x=variable,y=value,fill=group))+
        geom_bar(stat="identity",width=1,colour="black",size=0.1)+
        coord_polar()+
        scale_fill_brewer(palette="Greens")+
        xlab("")+ylab("")

위의 plot은 value의 변화를 bar의 높이로 표현했습니다. 다음 plot은 value의 변화를 색깔로 표현한
heatmap입니다.

ggplot(data=data3,aes(x=variable,y=group,fill=value))+
        geom_tile(colour="black",size=0.1)+
        scale_fill_gradientn(colours=c("white","steelblue"))+
        coord_polar()+xlab("")+ylab("")

두 그림의 차이가 눈에 보이시나요? heatmap을 보면 1월,4월,7월,10월에 A-G군의 value가 골고루 증가하였음을 알 수 있습니다. 반면 rose plot에서는 12월의 A,B의 높이가 커져 12월이 1월에 비해 높게 보입니다.