R프로그램으로 도넛차트 그리기

도넛차트를 그리기 위해 제공되는 ggplot2 함수는 사실상 없다. 약간의 편법같이 느껴질 수 있는데, 누적막대그래프를 그려놓고 coord_polar 함수를 사용하여 x축 혹은 y축 기준으로 구부려 만든다고 생각하면 편하다. 아래 그래프는 22대 총선 투표율을 간단하게 도넛차트로 만든 예시이다.

도넛차트 그리기

도넛차트를 그리기 위해서, tidyverse 패키지를 불러온다. 그 안에 ggplot2 패키지가 포함되어 있다. 데이터는 4가지 종류의 값을 샘플로 만들었다.

library(tidyverse)

data <- data.frame(
  Category = c("Category 1", "Category 2", "Category 3", "Category 4"),
  Value = c(20, 35, 30, 25)
)

간단하게 값들을 하나의 Bar 로 쌓아 올려본다. 올릴때 position_fill 를 사용해야 100% 기준의 누적막대그래프가 나온다.

ggplot(data) +
  geom_col(aes(x = 1, y = Value, fill = Category), 
           position = position_fill())

coord_polar 를 사용하여 y축 기준으로 구부려 원그래프를 우선 만든다.

ggplot(data) +
  geom_col(aes(x = 1, y = Value, fill = Category), 
           position = position_fill()) +
  coord_polar(theta = "y")

도넛차트를 만드려면, 안에 공간이 있어야 하는데, x축의 범위를 지정하면 완성이다.

ggplot(data) +
  geom_col(aes(x = 1, y = Value, fill = Category), 
           position = position_fill()) +
  coord_polar(theta = "y") +
  scale_x_continuous(limits = c(-3, 1.5))

0.25, 0.50, 0.75, 1.00 이런 수치보다 퍼센트로 바꿔주는게 좋을거 같다. scales 패키지에 있는 label_percent 함수를 사용하면 쉽게 변환할 수 있다.

(ggplot2) scales 패키지 사용 예제

ggplot(data) +
  geom_col(aes(x = 1, y = Value, fill = Category), 
           position = position_fill()) +
  coord_polar(theta = "y") +
  scale_x_continuous(limits = c(-3, 1.5)) +
  scale_y_continuous(breaks = c(0.25, 0.5, 0.75, 1), 
                     labels = scales::label_percent())


더 보면 좋을 글들