Rose plot with ggplot2
문건웅
May 10, 2016
통계마당에 올라온 김지형선생님의 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월에 비해 높게 보입니다.
Comment 1
-
cardiomoon
2016.05.10 10:39
- Total
- 의학논문 작성을 위한 R통계와 그래프
- R을 이용한 조건부과정분석
- 웹에서 클릭만으로 하는 R통계분석
- Learn ggplot2 Using Shiny App
- 일반화가법모형 소개
- 밑바닥부터 시작하는 ROC 커브 분석
- 웹R을 이용한 통계분석
- 의료인을 위한 R 생존분석
자료파일입니다.
Untitled.csv