티스토리 뷰

반응형

수평 막대그래프를 그리는 방법중의 하나를 정리해본다. 아래 왼편그림처럼 수직차트를 그려놓고, x/y 축을 뒤집어 바꾸어 오른쪽 그림처럼 변경이 가능하다. 그 기능을 제공하는 ggplot2::coord_flip 함수를 사용하면 된다.


테스트를 진행할 임시 데이터를 하나 만든다. 연도별 통계를 임의로 만들어본다. x축은 년도이고, y축은 50~150 사이의 숫자를 랜덤하게 만들어본다.

library(tidyverse)

tb = tibble(x = 2017:2022, y = sample(50:150, 6)) %>% 
  mutate(z = max(y) == y)
  
# A tibble: 6 × 3
      x     y z    
  <int> <int> <lgl>
1  2017    97 FALSE
2  2018   101 FALSE
3  2019   146 TRUE 
4  2020   110 FALSE
5  2021    67 FALSE
6  2022    88 FALSE



처음 할 일은 평범하게 수직그래프를 그리는 일이다. x축이 듬성듬성나오는건, 나중에 scale_x_continuous 를 이용해서 다 나오게 할 예정이다.

ggplot(tb, aes(x, y)) +
  geom_col(width = 0.6)

반응형

중요한 순간이다. coord_flip 를 호출하면, x축과 y축을 뒤바꾸게 되면서 수평막대차트가 만들어진다.

ggplot(tb, aes(x, y)) +
  geom_col(width = 0.6) +
  coord_flip()



디자인/여백/폰트 등을 정의하고, 최종 마무리를 진행한 결과이다.

ggplot(tb, aes(x, y, fill = z)) +
  geom_col(width = 0.6) +
  geom_text(aes(x = x, y = y, label = y), hjust = -0.5, family = "BMJUAOTF") + 
  scale_x_continuous(breaks = tb$x) + 
  scale_y_continuous(limits = c(0, max(tb$y) * 1.1)) +
  coord_flip() + 
  theme_void(base_family = "BMDoHyeon-OTF") + 
  theme(
    axis.text.y = element_text(),
    plot.margin = unit(c(.3,1,.3,1), "cm"),
    legend.position = "none"
  ) +
  scale_fill_manual(values = c("#a6bddb", "#0570b0"))
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함