R 그래프 - geom_bump 를 이용한 선그래프

R 패키지중에 ggbump 라고, 일반적인 선그래프와는 달리 랭킹간 변화추이를 보여주기 좋은 패키지가 있다. 아래 그림처럼 부드러운 곡선으로 라인으로 이어져 있어서 색다른 그래프를 만들 수 있다. tidytuesday 데이터를 활용해서 한번 그려본 차트이며, 자세한 설명과 구현방법은 github 페이지를 참고하시기 바란다.

그래프 데이터 만들기

데이터구조는 여타 데이터와 다를거 없다. x축이 될 year 는 년도를 의미하며, ord 는 각 tag 의 랭킹을 의미한다. 그래서 각 tags 별로 2017~2021년까지 5개년 데이터가 필요하다보니, 4개 tags x 5개년 = 20 row 의 데이터가 필요하다.

# A tibble: 20 × 3
    year   ord tags           
   <dbl> <int> <chr>          
 1  2017     1 TECH           
 2  2017     2 PRODUCTIVITY   
 3  2017     3 IPHONE         
 4  2017     4 DEVELOPER TOOLS
 5  2018     1 TECH           
 6  2018     2 PRODUCTIVITY   
 7  2018     4 IPHONE         
 8  2018     5 DEVELOPER TOOLS
 9  2019     1 TECH           
10  2019     2 PRODUCTIVITY   
11  2019     3 IPHONE         
12  2019     5 DEVELOPER TOOLS
13  2020     1 PRODUCTIVITY   
14  2020     2 TECH           
15  2020     3 IPHONE         
16  2020     4 DEVELOPER TOOLS
17  2021     1 PRODUCTIVITY   
18  2021     2 TECH           
19  2021     3 DEVELOPER TOOLS
20  2021     4 IPHONE      

geom_bump 를 이용한 그래프 그리기

우선 라인그래프를 그려본다. 그런데, 랭킹이란게 1이 숫자는 작아도 가장 높은 곳에 보여야 하는데, y 축에서 1의 값이 가장 낮다보니 뒤집어야(?) 한다.

ggplot(data = tb6, aes(year, ord, colour = factor(tags,v_ord))) +
  geom_line(size = 1)

y축을 뒤집으려면, scale_y_reverse 함수를 사용하면 된다. 아래 그림을 보면 아까 그림과 달리 y축에 1이 가장 높은곳에 있는 걸 볼 수 있다.

ggplot(data = tb6, aes(year, ord, colour = factor(tags,v_ord))) +
  geom_line(size = 1) +
  scale_y_reverse()

선그래프로도 랭킹의 변화는 느껴지긴하나, geom_bump를 사용해본다. 아까 만들었던 선그래프와 느낌이 어떤지 비교해본다.

ggplot(data = tb6, aes(year, ord, colour = factor(tags,v_ord))) +
  geom_bump(size = 1) +
  geom_point(size = 3) +
  scale_y_reverse()

선그래프 위에 점(point)를 찍었었는데, 점말고 글씨로 바꿔본다. geom_label 함수를 쓰면 자동으로 네모난 테두리가 생기는데, 옵션을 사용하면 모양/크기/색상 등 다르게 셋팅할 수도 있다.

ggplot(data = tb6, aes(year, ord, colour = factor(tags,v_ord))) +
  geom_bump(size = 1) +
  geom_label(aes(label = ord), size = 5) +
  scale_y_reverse()

x축 혹은 y축의 텍스트를 아래가 아닌 위(top)로, 왼쪽이 아닌 오른쪽(right)로 바꾸는 작업을 하면 어느정도 끝이 난다.

ggplot(data = tb6, aes(year, ord, colour = factor(tags,v_ord))) +
  geom_bump(size = 1) +
  geom_label(aes(label = ord), size = 7) +
  scale_y_reverse(position = "right") +
  scale_x_continuous(position = "top")

마지막으로 배경색, 폰트, 위치조정 등을 하고나면 아래와 같은 그래프를 만들 수 있다.


더 보면 좋을 글들