백분율과 절대값 병기하기
개요
그래프에서 백분율만 표시하면 데이터의 상대적 분포는 알기 쉬워지지만, 실제 규모를 파악하기 어려운 경우가 있습니다. 이번 글에서는 백분율과 함께 절대값을 병기하는 방법을 소개합니다. 2023년 시도별 시, 군, 구의 주민등록인구 비중 데이터를 사용하여, 주민등록인구 수도 함께 표기하는 과정을 보여드리겠습니다.
누적막대그래프에 백분율 표기하기
우선, 기존의 누적막대그래프에서 백분율만 표시하는 방법을 복습합니다. 아래 코드는 시도별 주민등록인구 비중 데이터를 사용해 백분율을 그래프에 텍스트로 표시합니다. 자세한 데이터 준비 과정과 그래프에 대한 설명은 누적막대그래프 그리기 글을 참고하세요.
ggplot(data = sum2,
aes(x = 시도, y = 비율, group = 시도, fill = 구분,
label = percent(비율, accuracy = .1, suffix = ""))) +
geom_col(position = "stack", color = "white", linewidth = 0.4,
width = 0.6) +
geom_text_repel(family = "kopub",
position = position_stack(vjust = 0.5),
size = text.size,
force = 0.001,
force_pull = 1000) +
scale_y_continuous(labels = percent_format(accuracy = 1),
expand = expansion(mult = c(0, 0.1))) +
scale_fill_brewer(palette = "Pastel2") +
theme_minimal(base_size = theme.size, base_family = "kopub") +
theme(
axis.line.y = element_blank(),
axis.line.x = element_line(color = "#959595", linewidth = 2),
axis.title = element_blank(),
axis.text.y = element_blank(),
legend.title = element_blank(),
legend.position = "bottom",
legend.box.background = element_rect(color = "#959595", linewidth = 1),
legend.key.size = unit(theme.size, "pt"),
panel.grid = element_blank()
)

백분율과 절대값 병기하기
데이터의 의미를 더 명확히 전달하기 위해 백분율과 절대값을 함께 표시하겠습니다. 절대값은 주민등록인구 수를 만 명 단위로 변환해 추가하며, 두 값을 paste0 함수를 사용해 병기합니다. 백분율과 절대값은 서로 다른 정보지만, 함께 표기하면 데이터를 이해하는 데 더욱 유용할 수 있습니다.
label을 수정해 백분율과 절대값을 함께 표시할 수 있습니다. 백분율은 percent 함수로 포맷팅하고, 절대값은 comma 함수로 포맷팅합니다. 텍스트 길이가 길어졌기 때문에 geom_text_repel 함수에서 텍스트 크기(size = text.size * 0.8)를 약간 축소해 줍니다. lineheight = 1로 줄 간격을 조정해 줍니다.
ggplot(data = sum2,
aes(x = 시도, y = 비율, group = 시도, fill = 구분,
label = paste0(percent(비율, accuracy = .1),
"\n(",
comma(주민등록인구수/10000, accuracy = 1, suffix = "만 명"),
")")
)
) +
geom_col(position = "stack", color = "white", linewidth = 0.4,
width = 0.6) +
geom_text_repel(family = "kopub",
position = position_stack(vjust = 0.5),
size = text.size * 0.8,
lineheight = 1.0,
force = 0.001,
force_pull = 1000) +
scale_y_continuous(labels = percent_format(accuracy = 1),
expand = expansion(mult = c(0, 0.1))) +
scale_fill_brewer(palette = "Pastel2") +
theme_minimal(base_size = theme.size, base_family = "kopub") +
theme(
axis.line.y = element_blank(),
axis.line.x = element_line(color = "#959595", linewidth = 2),
axis.title = element_blank(),
axis.text.y = element_blank(),
legend.title = element_blank(),
legend.position = "bottom",
legend.box.background = element_rect(color = "#959595", linewidth = 1),
legend.key.size = unit(theme.size, "pt"),
panel.grid = element_blank()
)

이번 글에서는 그래프에 백분율과 절대값을 함께 표기하는 방법을 소개했습니다. 이 방법은 상대적 비율과 절대적 크기를 모두 보여줘 데이터 전달력을 높이는 데 유용합니다. 백분율과 절대값 병기 같은 작은 디테일도 큰 차이를 만들 수 있으니, 여러분의 데이터 시각화에 꼭 활용해 보세요!