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”)): 강수량 데이터를 별도로 추가합니다.
ggplot2 다중 축 예시1

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”)): 온도와 강수량의 색상을 각각 파랑과 초록으로 지정하여 가독성을 높입니다.
ggplot2 다중 축 예시2

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 다중 축 예시3

마무리: ggplot2 다중 축을 통해 데이터 비교를 한눈에!

ggplot2 다중 축을 사용하면 서로 다른 단위의 데이터를 한 그래프에서 시각화하여 비교할 수 있습니다. secondary y-axis를 활용하면 복잡한 데이터를 더 쉽게 해석할 수 있어, 분석에 큰 도움이 됩니다.

이제 여러분도 다양한 데이터를 하나의 그래프에서 표현해 보세요. 다음 포스트에서는 ggplot2의 고급 테마 설정 방법을 소개할 예정이니 기대해 주세요!

유사한 게시물