티스토리 뷰

도넛차트를 그리기는 여럿 그려보긴했는데, 아래 처럼 일부 조각을 띄우는 방식은 만들고 싶었다. 이게 ggplot2 라이브러리의 옵션으로 제공되지 않기 때문에, 다른 방법을 강구해야만 했다. 알아낸 방법은 geom_tile 함수를 이용해서 살짝 위치이동을 하면, 조각 하나가 별도로 떨어져나와서 강조가 되는 그런 도넛차트를 만들 수 있다.


기본 도넛차트를 그리는 법은 아래 링크들을 참고한다.

 

(ggplot2) R 프로그래밍 파이차트/도넛차트 예제

오늘은 파이차트(원모양의 그래프, 원그래프) 혹은 가운데가 비어있는 도넛차트를 만들어보려 한다. 기본 데이터셋인 mtcars 를 활용해서 우선 bar 차트를 만들어야 한다. 여기서 중요한건, factor

emflant.tistory.com

 

원형차트, 도넛차트 시작 위치 & 각도 조정하기

r 프로그래밍 언어로 원그래프/도넛차트를 그릴때, 어느 위치부터 값을 그릴지 셋팅하는 걸 정리해본다. 저번에 ggplot 으로 파이차트와 도넛차트를 그려보았다. 항상 0 이 12시 위치에서 시작할

emflant.tistory.com



우선 geom_tile 로 직사각형을 만들고 그걸 이용해 특정 조각이 띄워지는 효과를 내볼까한다 그러기위해서는 데이터를 만드는 과정이 추가적으로 필요하다. w값은 width 로 각 직사각형의 가로 길이이고, h는 각 직사각형의 높이, y 는 각 직사각형의  나머지는 x 값을 구하기 위한 과정이다. 

tibble(w = c(2,4,1,2,1), # 직사각형의 가로 길이
       h = rep(1,5), # 각 직사각형의 높이는 1로 기본셋팅.
       y = c(1.4,1,1,1,1)) %>% # 조각들의 높이값, 띄울게 있으면 1보다 크게 설정.
  mutate(w1 = cumsum(w)) %>% 
  mutate(w2 = lag(w1, 1, default = 0)) %>% 
  mutate(x = w / 2 + w2)
  
  # A tibble: 5 × 6
      w     h     y    w1    w2     x
  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1     2     1   1.4     2     0   1  
2     4     1   1       6     2   4  
3     1     1   1       7     6   6.5
4     2     1   1       9     7   8  
5     1     1   1      10     9   9.5

 

geom_tile 은 사실상 직사각형이 위치할 중앙좌표(x,y)를 주고, width 와 height 를 줘야 하기 때문에, 사전에 어느정도 계산이 되어야 한다. 어쨋든 값을 잘 셋팅하면, 아래와 같이 그려진다. 근데 빨간색 직사각형은 살짝 위에 그렸는데, 이게 나중에 도넛차트의 일부 조각이 띄워져 보이는 효과를 만들어 낸다.

ggplot(tb1, aes(x, y, width = w, 
                height = h, 
                fill = factor(x))) +
  geom_tile() +
  coord_fixed()

반응형

이제 coord_polar 함수로 원형으로 만들어보자. 빨간색 조각만 살짝 들떠있는게 보인다.

ggplot(tb1, aes(x, y, width = w, 
                height = h, 
                fill = factor(x))) +
  geom_tile() +
  coord_polar() +
  theme_bw() +
  theme(legend.position = "none",
        axis.title.x = element_blank())

 

 

가운데가 비어있지 않기 때문에, ylim 으로 살짝 공간을 넣어주고, colour 를 흰색으로 셋팅하면 끝.

ggplot(tb1, aes(x, y, width = w, 
                height = h, 
                fill = factor(x))) +
  geom_tile() +
  coord_polar() +
  ylim(c(-3,2)) +
  theme_bw() +
  theme(legend.position = "none",
        axis.title.x = element_blank())

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함