'원그림'에 해당되는 글 1건

  1. 2015.08.22 R ggplot2 원그림(geom_bar() + coord_polar())

변수의 개수 및 데이터의 형태에 따라서 그래프, 시각화 방법이 달라지는데요,

 

지난번 포스팅에서는 연속형 데이터의 시각화 방법으로

 - 히스토그램(Histogram)
    : geom_histogram()

- 커널 밀도 곡선(Kernel Density Curve)
    : geom_density()

 - 박스 그래프(Box Plot)
    : geom_boxplot()

 - 바이올린 그래프(Violin Plot)
    : geom_violin()

에 대해서 알아보았습니다. 

 

 

이번 포스팅에서는 범주형 데이터의 시각화 방법으로서

 

 - 막대그림(Bar Chart): geom_bar()

 - 원그림(Pie Chart): geom_bar() + coord_polar()

 - 모자이크 그림(Mosaic Chart): vcd 패키지 mosaic()

 

에 대해서 소개해드리겠습니다.

 

 

[ 변수 개수 및 데이터 형태에 따른 그래프 ]

 

 

 

데이터는 MASS 패키지에 들어있는 Cars93 데이터 프레임의 차종(Type)과 제조국(Origin) 데이터를 활용해서 차종별 제조국별 도수를 구한 후에, 원그림을 그려보겠습니다.

 

원그림은 세로로 쌓아올린(stacked) 막대그림을 먼저 geom_bar()로 먼저 그린 후에 ==> coord_polar("y")로 해서 표현 형식을 원형(polar coordinates)으로 바꾸어주는 절차를 따릅니다.

 

(1) 바로 아래에 있는 그래프가 쌓아올린 막대그림 (stacked bar chart) 이구요,

 

> ## 원그림(Pie Chart)
> library(ggplot2)
> library(MASS)
> 
> # 막대그림 먼저 그린 후 => 원그림
> library(sqldf)
> Car_Type_Origin_cnt <- sqldf( 'select Type, Origin, count(*) as Type_Origin_cnt
+                               from Cars93
+                               group by Type, Origin
+                               order by Type, Origin
+                               ')
> 
> Car_Type_Origin_cnt
      Type  Origin Type_Origin_cnt
1  Compact     USA               7
2  Compact non-USA               9
3    Large     USA              11
4  Midsize     USA              10
5  Midsize non-USA              12
6    Small     USA               7
7    Small non-USA              14
8   Sporty     USA               8
9   Sporty non-USA               6
10     Van     USA               5
11     Van non-USA               4
> 
> sapply(Car_Type_Origin_cnt, class)
           Type          Origin Type_Origin_cnt 
       "factor"        "factor"       "integer" 
> 
> 
> ggplot(data=Car_Type_Origin_cnt, aes(x="", y=Type_Origin_cnt, fill=Type)) +
+   facet_grid(facets=. ~ Origin) + 
+   geom_bar(stat="identity", width=1) + 
+   ggtitle("Bar Chart of Frequency by Car Type & Origin")

 

 

 

 

 

(2) 그 다음 표현형식을 coord_polar("y") 를 써서 원형으로 바꾸어 본 것이 아래 script 가 되겠습니다.

 

> 
> # 원그림(Pie Chart) : geom_bar() + coord_ploar(theta="y")
> ggplot(data=Car_Type_Origin_cnt, aes(x="", y=Type_Origin_cnt, fill=Type)) +
+   facet_grid(facets=. ~ Origin) + 
+   geom_bar(stat="identity", width=1) + 
+   coord_polar(theta="y") + 
+   ggtitle("Pie Chart of Car Type by Origin, theta=y")

 

 

 

 

 

 

이번 포스팅에서 원그림(Pie Chart)를 소개하기는 했습니다만, 저는 원그림은 그다지 추천하지 않습니다.  일단 눈으로 보고 해석하기에, 범주간 비교하기에 그다지 용이하지가 않습니다.  파이 조각의 면적을 눈으로 가늠해서 비교하기가 쉽지 않거든요.  막대그림으로 높이를 비교하는 것이 범주 간 차이를 단박에 보여주는 것과 비교하면 원그림은 그래프를 봐야하는 이에게는 불친절한 그래프입니다.

(단, 두 집단(가령 USA, non-USA) 간에 과반을 넘는 특정 segment를 비교해서 강조하고 싶은 경우는 원그림이 효과적일 수 있음)

 

신문이나 잡지에서 보면 원그림을 많이 사용하고 있고, 더 나아가서는 입체 원그림을 그리고, 또 나아가서는 입체 원그림의 한 조각을 확대하거나 원그림을 살짝 눕히기도 하는데요, 이건 정말 최악 중의 최악입니다.  일단, 시각적으로 해석하기에 어렵구요, 더 나아가서는 악의를 가지고 시각의 불완전성을 이용해서 정보를 왜곡/오도하기 위한 것일 수도 있으니 주의가 필요합니다

 

웬만하면 원그림은 사용하지 말기를 권하며, 누가 원그림 사용하거든 그만 사용하라고 권해주기를 권합니다.  그냥 쉽고 편한 막대그림 사용하세요.

 

참고용으로, 막대그림으로 나타내면 아래와 같은데요, 위의 원그림과 비교해보시기 바랍니다.  뭐가 더 쉽고 해석하기 편한지요.

 

> # 막대그림
> ggplot(data=Car_Type_Origin_cnt, aes(x=Type, y=Type_Origin_cnt)) +
+   facet_grid(facets=. ~ Origin) + 
+   geom_bar(stat="identity", width=1, fill="white", colour="black") + 
+   ggtitle("Bar Chart of Frequency by Car Type & Origin")

 

 

 

 

원그림 소개한다고 해놓고는, 막대그림으로 끝을 맺네요. ^^'

 

이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡' 단추를 꾸욱 눌러주세요.^^

 

 

Posted by R Friend R_Friend