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))