티스토리 뷰

최근 한국은행 기준금리가 계속 인상되고 있다. 이런 금리 인상을 표현할때, 그냥 꺽은선을 나타내기보다는 보통 계단식으로 표현되곤 한다. 상승이 되면 그 시점부터 다음 변동시기까지 같은 값으로 유지되는 y 축값을 표현할때 좋다. geom_step 함수를 이용하면 아래와 같은 그래프를 만들 수 있다. 

 

다뤄볼 데이터는 한국은행 사이트에 있는 기준금리 정보를 가져다 사용한다. 

tb_baserate = read_excel("~/github/ggplot2/2022/20220729/The Bank of Korea Base Rate.xlsx")

tb_baserate1 = tb_baserate %>% 
  unite("년도", "변경일자", col = "date", sep = " ") %>% 
  mutate(date = ymd(date)) %>% 
  rename(base_rate = 기준금리) %>% 
  arrange(date) %>% 
  filter(date >= ymd("2018-01-01"))
  
  # A tibble: 11 × 2
   date       base_rate
   <date>         <dbl>
 1 2018-11-30      1.75
 2 2019-07-18      1.5 
 3 2019-10-16      1.25
 4 2020-03-17      0.75
 5 2020-05-28      0.5 
 6 2021-08-26      0.75
 7 2021-11-25      1   
 8 2022-01-14      1.25
 9 2022-04-14      1.5 
10 2022-05-26      1.75
11 2022-07-13      2.25

 

보통의 라인그래프(선그래프)로 그리게되면 아래처럼 나오게 된다.

ggplot(tb_baserate1, aes(date, base_rate)) +
  geom_line(size = 1)

 

하지만 geom_step 함수를 사용하면 대략 아래의 그래프를 만들 수 있다.

ggplot(tb_baserate1, aes(date, base_rate)) +
  geom_step(size = 1)

반응형

계단형으로 그래프가 만들어지다보니, 실제 매핑되는 값의 위치가 어디인지 정확히 알기가 어려워서 점으로 표시해본다.

ggplot(tb_baserate1, aes(date, base_rate)) +
  geom_step(size = 1) +
  geom_point(size = 4) +
  geom_point(size = 2, colour = "gray100")

 

마지막으로 디자인까지 적용하고나면, 아래의 결과를 얻을 수 있다. 포인트가 다 있는 거보다는 마지막에만 있는게 조금 더 깔끔한거 같다.

ggplot(tb_baserate1, aes(date, base_rate)) +
  geom_step(size = 1, colour = in_colour) +
  scale_x_date(limits = c(ymd("2018-11-30"), ymd("2022-12-31")),
               breaks = x_breaks, labels = x_label) +
  scale_y_continuous(limits = c(0.25,3),
                     breaks = seq(0,5,0.5)) +
  annotate("rect", xmin = ymd("2022-03-13"), xmax = ymd("2022-11-13"),
           ymin = 2.4, ymax = 2.8, fill = v_background_color) +
  annotate("text", x = v_x, y = v_y + 0.25,
           label = paste0(v_y, "%"),
           family = "AppleSDGothicNeo-Bold", size = 5, colour = v_font_color) +
  annotate("point", size = 3.5, colour = in_colour,
           x = v_x, y = v_y) +
  annotate("point", size = 1.5, colour = v_background_color,
           x = v_x, y = v_y) +
  theme_minimal(base_family = "AppleSDGothicNeo-Bold") +
  theme(legend.position = "none",
        axis.text = element_text(colour = v_font_color),
        axis.line.x = element_line(colour = v_font_color, size = 1),
        axis.text.x = element_text(margin = margin(0.1,0,0,0,"cm")),
        axis.ticks.x = element_line(color = rep(c(v_font_color, NA), length.out = 9),
                                    size = 1),
        axis.ticks.length.x = unit(0.2,"cm"),
        axis.title = element_blank(),
        panel.grid = element_blank(),
        panel.grid.major.y = element_line(size = .3, colour = v_font_color, 
                                          linetype = "dotted"),
        plot.margin = margin(1,1,1,.8, "cm"),
        plot.caption = element_text(color = v_font_color, family = "Menlo", 
                                    hjust = 1, size = 8,
                                    margin = margin(0.5,0,0,0,"cm")),
        plot.background = element_rect(fill = v_background_color, color = v_background_color))
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함