ggplot2 다중 축 그래프 구현하기 – secondary y-axis 적용법
여러 변수를 한 그래프에서 비교하고 싶으신가요? 두 개 이상의 데이터가 있는 경우, ggplot2 다중 축 기능을 사용하면 한 눈에 보기 쉽게 시각화할 수 있습니다.
ggplot2 패키지에서 secondary y-axis를 추가하여 데이터를 다양한 시각으로 분석할 수 있는 방법을 오늘 알아보겠습니다. 초보자도 쉽게 따라할 수 있도록 각 단계를 자세히 설명드릴게요.
ggplot2에서 다중 축이 필요한 이유는?
데이터 분석에서 각기 다른 단위를 사용하는 두 변수를 비교해야 할 때가 많습니다. 예를 들어, 온도와 강수량처럼 성격이 다른 데이터를 한 그래프에 표시하고 싶을 때 ggplot2 다중 축을 사용하면 유용합니다.
1. 기본 선 그래프 그리기
먼저 두 개의 데이터를 포함한 기본 선 그래프를 그려보겠습니다.
# 라이브러리 로드
library(ggplot2)
# 예제 데이터 생성
data <- data.frame(
month = 1:12,
temperature = c(2, 3, 5, 9, 14, 18, 21, 20, 15, 10, 5, 3),
rainfall = c(30, 40, 45, 55, 60, 75, 80, 70, 50, 45, 35, 30)
)
# 기본 선 그래프 생성
p <- ggplot(data, aes(x = month)) +
geom_line(aes(y = temperature, color = "Temperature")) +
geom_line(aes(y = rainfall, color = "Rainfall")) +
labs(title = "Monthly Temperature and Rainfall", x = "Month", y = "Temperature")
p
코드 설명:
- aes(x = month): x축에 월을 설정합니다.
- geom_line(aes(y = temperature, color = “Temperature”)): 온도 데이터를 선 그래프로 그리며 색상을 지정합니다.
- geom_line(aes(y = rainfall, color = “Rainfall”)): 강수량 데이터를 별도로 추가합니다.
2. secondary y-axis 추가하기
이제 secondary y-axis를 추가해 강수량(y축)을 별도의 축으로 표시해보겠습니다.
# 라이브러리 로드
library(ggplot2)
# 예제 데이터 생성
data <- data.frame(
month = 1:12,
temperature = c(2, 3, 5, 9, 14, 18, 21, 20, 15, 10, 5, 3),
rainfall = c(30, 40, 45, 55, 60, 75, 80, 70, 50, 45, 35, 30)
)
# 다중 축 적용
p <- ggplot(data, aes(x = month)) +
geom_line(aes(y = temperature, color = "Temperature")) +
geom_line(aes(y = rainfall/10, color = "Rainfall")) +
scale_y_continuous(name = "Temperature", sec.axis = sec_axis(~.*10, name = "Rainfall")) +
labs(title = "Monthly Temperature and Rainfall", x = "Month") +
scale_color_manual(values = c("Temperature" = "blue", "Rainfall" = "green"))
p
코드 설명:
- geom_line(aes(y = rainfall/10, color = “Rainfall”)): 강수량 데이터를 10으로 나누어 온도와 유사한 범위로 변환합니다.
- scale_y_continuous(name = “Temperature””, sec.axis = sec_axis(~.*10, name = “Rainfall”)): y축을 두 개로 나누고, 오른쪽 축에 강수량을 표시합니다. 왼쪽 축은 온도, 오른쪽 축은 강수량을 나타냅니다.
- scale_color_manual(values = c(“온도” = “Temperature”, “Rainfall” = “green”)): 온도와 강수량의 색상을 각각 파랑과 초록으로 지정하여 가독성을 높입니다.
3. 추가 예시 – 세련된 ggplot2 다중 축 그래프
이번 예시에서는 강수량을 막대로, 온도를 선으로 표현하여 두 변수의 관계를 효과적으로 보여줍니다. 색상 대비와 레이아웃 개선을 통해 데이터의 패턴을 쉽게 파악할 수 있으며, 전문적이고 세련된 디자인으로 시각적 매력을 높였습니다.
# 라이브러리 로드
library(ggplot2)
library(scales)
# 예제 데이터 생성
data <- data.frame(
month = 1:12,
temperature = c(2, 3, 5, 9, 14, 18, 21, 20, 15, 10, 5, 3),
rainfall = c(30, 40, 45, 55, 60, 75, 80, 70, 50, 45, 35, 30)
)
# 향상된 다중 축 그래프 생성
p <- ggplot(data, aes(x = month)) +
geom_col(aes(y = rainfall, fill = "Rainfall"), alpha = 0.5) +
geom_line(aes(y = temperature * 4, color = "Temperature"), size = 1.2) +
geom_point(aes(y = temperature * 4, color = "Temperature"), size = 3) +
scale_y_continuous(
name = "Rainfall (mm)",
sec.axis = sec_axis(~./4, name = "Temperature (°C)")
) +
scale_x_continuous(breaks = 1:12, labels = month.abb) +
scale_fill_manual(values = c("Rainfall" = "#69b3a2")) +
scale_color_manual(values = c("Temperature" = "#E69F00")) +
labs(
title = "Monthly Temperature and Rainfall",
subtitle = "Showcasing climate patterns throughout the year",
x = "Month",
color = "",
fill = ""
) +
theme_minimal() +
theme(
legend.position = "top",
plot.title = element_text(hjust = 0.5, face = "bold", size = 16),
plot.subtitle = element_text(hjust = 0.5, size = 12, color = "gray50"),
axis.title = element_text(face = "bold"),
panel.grid.major = element_line(color = "gray90"),
panel.grid.minor = element_blank()
)
p
코드 설명:
geom_col()
: 강수량을 막대 그래프로 표현합니다.alpha = 0.5
로 투명도를 조절했습니다.geom_line()
및geom_point()
: 온도를 선 그래프와 점으로 표현합니다. 온도값에 4를 곱해 강수량과 비슷한 스케일로 조정했습니다.scale_y_continuous()
: 주 y축은 강수량, 보조 y축은 온도를 나타냅니다.sec.axis = sec_axis(~./4, name = "Temperature (°C)")
로 보조 축을 설정했습니다.scale_x_continuous()
: x축 레이블을 월 약자로 표시합니다.scale_fill_manual()
및scale_color_manual()
: 강수량과 온도에 각각 다른 색상을 지정합니다.labs()
: 그래프의 제목, 부제목, 축 레이블을 설정합니다.theme_minimal()
: 깔끔한 기본 테마를 적용합니다.theme()
: 그래프의 세부적인 스타일을 조정합니다. 범례 위치, 제목 스타일, 그리드 라인 등을 커스터마이즈했습니다.
마무리: ggplot2 다중 축을 통해 데이터 비교를 한눈에!
ggplot2 다중 축을 사용하면 서로 다른 단위의 데이터를 한 그래프에서 시각화하여 비교할 수 있습니다. secondary y-axis를 활용하면 복잡한 데이터를 더 쉽게 해석할 수 있어, 분석에 큰 도움이 됩니다.
이제 여러분도 다양한 데이터를 하나의 그래프에서 표현해 보세요. 다음 포스트에서는 ggplot2의 고급 테마 설정 방법을 소개할 예정이니 기대해 주세요!