ggplot2에서 y축을 오른쪽으로 변경하는 방법

ggplot2에서 기본적으로 y축은 그래프의 왼쪽에 표시된다. 하지만 데이터 시각화 목적에 따라 y축을 오른쪽으로 이동해야 할 때가 있다. 예를 들어, 아래 그래프의 경우처럼 y축을 오른쪽에 배치하면 더 직관적인 경우가 있다. 이번 글에서는 y축을 오른쪽에 배치하는 방법을 정리한다.

데이터 설명

최초 투자원금 1200만원이고 20년간 120만원씩 추가 투자하는 경우, 50년간 최종평가금액을 계산한 데이터이다. 매년 수익률 5%, 7%, 9% 로 3가지 케이스를 가지고 계산해봤다.

  • cum_deposit : 수익률이 전혀 반영되지 않은 순수 누적불입금액
  • eval_value1 : 매년 5% 수익률을 반영한 평가금액
  • eval_value2 : 매년 7% 수익률을 반영한 평가금액
  • eval_value3 : 매년 9% 수익률을 반영한 평가금액
> print(tb4)
# A tibble: 50 × 5
       t cum_deposit eval_value1 eval_value2 eval_value3
   <dbl>       <dbl>       <dbl>       <dbl>       <dbl>
 1     1    13200000   13860000    14124000    14388000 
 2     2    14400000   15813000    16396680    16990920 
 3     3    15600000   17863650    18828448.   19828103.
 4     4    16800000   20016832.   21430439.   22920632.
 5     5    18000000   22277674.   24214570.   26291489.
 6     6    19200000   24651558.   27193590.   29965723.
 7     7    20400000   27144136.   30381141.   33970638.
 8     8    21600000   29761343.   33791821.   38335995.
 9     9    22800000   32509410.   37441248.   43094235.
10    10    24000000   35394880.   41346135.   48280716.
# ℹ 40 more rows
# ℹ Use `print(n = ...)` to see more rows

그래프 그리기

이런 데이터의 유형은 geom_area 로 나타내기 적합하다. 하나씩 겹쳐 그려지면 수익의 차이가 잘 보이게 된다. 별다른 설정 없이는 y축 수치는 왼쪽에 나타나게 된다.

ggplot(tb4 |> filter(t <= 20)) +
  geom_area(aes(t, eval_value3), alpha = 0.3, 
            colour = "goldenrod", fill = "goldenrod") +
  geom_area(aes(t, eval_value2), alpha = 0.3, 
            colour = "goldenrod", fill = "goldenrod") +
  geom_area(aes(t, eval_value1), alpha = 0.3, 
            colour = "goldenrod", fill = "goldenrod") +
  geom_area(aes(t, cum_deposit), alpha = 0.5, 
            colour = "firebrick", fill = "firebrick") +
  scale_y_continuous(labels = label_comma(),
                     breaks = c(13200000, v_breaks)) +
  theme_bw(base_family = "Menlo") +
  theme(axis.title = element_blank(),
        axis.text = element_text(face = "bold"),
        panel.grid.minor = element_blank(),
        panel.grid.major.x = element_blank())

y축을 오른편으로 옮기면 데이터 가독성이 좋을거 같다. 옮기는건 간단하다. scale_y_continuous 함수에서 position = "right"을 추가하면 된다.

scale_y_continuous(labels = label_comma(),
                   breaks = c(13200000, v_breaks),
                   position = "right")

숫자가 오른쪽 정렬까지 되면 더 좋을거 같다. theme 에서 설정할 수 있으니, 아래 소스를 참고한다.

theme(axis.title = element_blank(),
      axis.text = element_text(face = "bold"),
      panel.grid.minor = element_blank(),
      panel.grid.major.x = element_blank(),
      axis.text.y.right = element_text(hjust = 1))


더 보면 좋을 글들