10.2 파이 차트

ggplot() 함수를 이용하여 파이 차트를 작성하기 위해서는 먼저 geom_bar() 함수를 이용하여 막대 그래프를 그린 다음, coord_polar(“y”) 함수를 추가하여 원형의 파이 차트로 변환하는 절차를 따릅니다.

10.2.1 데이터 세트

데이터는 MASS 패키지에 들어있는 Cars93 데이터 프레임의 차종(Type)종별 파이 차트를 그려보겠습니다.

library(ggplot2)
library(MASS)
str(Cars93)

10.2.2 기본 파이 차트

파이 차트는 누적(stacked) 막대 그래프를 먼저 geom_bar()함수를 이용하여 그린 다음, coord_polar("y")함수를 이용하여 원형(polar coordinates)으로 변경하는 절차를 따릅니다.

(절차 1) 바로 아래에 있는 그래프가 누적 막대 그래프(stacked bar chart)를 그립니다.

# 막대 그래프를 먼저 그린다.
Cars93 %>%
  ggplot() +
  aes(x = "") +
  aes(fill = Type) +
  geom_bar(width = 1)
파이 차트를 그리기 위한 누적 막대 그래프

Figure 10.17: 파이 차트를 그리기 위한 누적 막대 그래프

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

## 파이 차트(Pie Chart)
Cars93 %>%
  ggplot() +
  aes(x = "") +
  aes(fill = Type) +
  geom_bar(width = 1) +
  coord_polar("y")
기본 파이 차트

Figure 10.18: 기본 파이 차트

Go Top

10.2.3 불스 아이 차트

그런데 이때 coord_polar()에 인수값을 지정하지 않으면 불스 아이 차트(Bull’s Eye Chart)가 됩니다.

## 불스 아이 차트
Cars93 %>%
  ggplot() +
  aes(x = "") +
  aes(fill = Type) +
  geom_bar(width = 1) +
  coord_polar()
불스 아이 차트

Figure 10.19: 불스 아이 차트

Go Top

10.2.4 Coxcomb Plot

한편 aes(x = Type)을 추가하면 Coxcomb Plot이 됩니다.

# Coxcomb Plot
Cars93 %>%
  ggplot() +
  aes(x = Type) +
  aes(fill = Type) +
  geom_bar(width = 1) +
  coord_polar()
Coxcomb Plot 1

Figure 10.20: Coxcomb Plot 1

coord_polar("y")로 수정하면 다음과 같은 그래프가 됩니다.

# Coxcomb Plot
Cars93 %>%
  ggplot() +
  aes(x = Type) +
  aes(fill = Type) +
  geom_bar(width = 1) +
  coord_polar("y")
Coxcomb Plot2

Figure 10.21: Coxcomb Plot2

Go Top

10.2.5 그룹별 파이 차트

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

10.2.5.1 aes() 함수 이용

파이 차트는 누적(stacked) 막대 그래프를 먼저 geom_bar()함수를 이용하여 그린 다음, coord_polar("y")함수를 이용하여 원형(polar coordinates)으로 변경하는 절차를 따릅니다.

(절차 1) 바로 아래에 있는 그래프가 누적 막대 그래프(stacked bar chart)를 그립니다.

Cars93 %>%
  ggplot() +
  geom_bar(aes(x = Type,          # 첫 번째 범주형 변수
               y = ..count..,
               fill = Type,
               colour = Origin),  # 두번쨰 범주형 변수
           stat = "count")
제조국별 파이 차트 작성을 위한 막대 그래프

Figure 10.22: 제조국별 파이 차트 작성을 위한 막대 그래프

**(절차 2) 그 다음 표현형식을 coord_polar("y") 를 써서 파이차트를 작성합니다.

Cars93 %>%
  ggplot() +
  geom_bar(aes(x = Type,          # 첫 번째 범주형 변수
               y = ..count..,
               fill = Type,
               colour = Origin),  # 두번쨰 범주형 변수
           stat = "count") + 
  coord_polar("y") +
  ggtitle("제조국별 파이 차트 1 : aes() 함수의 이용")
제조국별 파이 차트 1 : aes() 함수의 이용

Figure 10.23: 제조국별 파이 차트 1 : aes() 함수의 이용

Go Top

10.2.5.2 facet_grid() 함수 이용

Cars93 %>%
  ggplot() +
  aes(x = "") +
  aes(fill = Type) +
  geom_bar(width = 1) +
  facet_grid(. ~ Origin) +
  coord_polar("y") +
  ggtitle("제조국별 파이 차트 2 - facet_grid() 함수 이용")
제조국별 파이 차트 2 - facet_grid() 함수 이용

Figure 10.24: 제조국별 파이 차트 2 - facet_grid() 함수 이용

여기서 facet_grid(. ~ Origin) 대신에 facet_grid(Orgin ~ .), facet_grid(. ~ Type), facet_grid(Type ~ .), facet_grid(Type ~ Orgin), 그리고 facet_grid(Orgin ~ Type) 등으로 변경해 보기 바랍니다.

10.2.5.3 facet_wrap() 함수 이용

Cars93 %>%
  ggplot() +
   aes(x = "") +
   aes(fill = Type) +
  geom_bar(width = 1) +
  facet_wrap(Origin ~ Type) +
  coord_polar("y") +
  ggtitle("제조국별 파이 차트 3 - facet_wrap() 함수 이용")
제조국별 파이 차트 3 - facet_wrap() 함수 이용

Figure 10.25: 제조국별 파이 차트 3 - facet_wrap() 함수 이용

여기서 facet_wrap(Origin ~ Type) 부분을 facet_wrap( ~ Type), facet_wrap(Type ~ Origin), facet_wrap( ~ Origin), facet_wrap(vars(Origin)), 그리고 facet_wrap(vars(Type)) 등으로 변경해 보기 바랍니다.

이번 절에서 파이 차트를 소개하기는 했습니다만, 저는 파이 차트는 그다지 추천하지 않습니다. 일단 눈으로 보고 해석하기에, 범주간 비교가 용이하지가 않기 때문입니다.

막대 그래프의 높이가 범주 간 차이를 바로 보여주는 것과 비교하면 파이 차트는 불친절한 그래프입니다.

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

Go Top

연습문제

1. Cars93 데이터 세트에 있는 범주형 변수를 파이 차트를 이용하여 시각화 하려 합니다.

1-1. AirBags 변수에 대한 기본 파이 차트를 작성하시오.
ggplot(Cars93, aes(x = "", fill = AirBags)) +
  geom_bar(width = 1) +
  coord_polar("y") +
  ggtitle("기본 파이 차트 : AirBags")

1-2. AirBags 변수에 대한 불스 아이 차트를 작성하시오.
ggplot(Cars93, aes(x = "", fill = AirBags)) +
  geom_bar(width = 1) +
  coord_polar() +
  ggtitle("불스 아이 차트 : AirBags")

1-3. AirBags 변수에 대한 Coxcomb Plot을 작성하시오.

Coxcomb Plot 1 :

ggplot(Cars93, aes(x = AirBags, fill = AirBags)) +
  geom_bar(width = 1) +
  coord_polar() +
  ggtitle("Coxcomb Plot 1 : AirBags")

Coxcomb Plot 2 :

ggplot(Cars93, aes(x = AirBags, fill = AirBags)) +
  geom_bar(width = 1) +
  coord_polar("y") +
  ggtitle("Coxcomb Plot 2 : AirBags")

2. AirBags 변수에 대하여 자동차 유형(Type) 변수를 그룹으로 하여 그룹별 파이 차트를 작성하시오. 단, facet_wrap( , ncol = 3) 함수를 이용하시오.

ggplot(Cars93, aes(x = "", fill = AirBags)) +
  geom_bar(width = 1) +
  coord_polar("y") +
  facet_wrap( ~ Type, ncol = 3) +
  ggtitle("자동차 유형별 파이 차트 : AirBags")

Go Top