티스토리 뷰

개발/R

ggplot2 분할막대그래프 예시

드림&T 2022. 6. 11. 00:25

분할막대그래프는 실제 값으로 누적해서 막대그래프를 만드는게 아니라, 전체를 100% 로 보았을때, 각 파트별 비중을 한눈에 보기위한 그래프이다. 왼쪽그림은 그냥 값을 누적한 누적막대그래프이고, 오른쪽은 각각의 값을 백분율을 구해서 그린 분할막대그래프이다. 용어는 사실 다르게 불릴 수도 있으니 개념만 참고바란다.

 

분할 막대그래프 그려보자.

그래프를 만들기위해 데이터를 만들어야 한다. 비례 막대차트를 만들어야 하니, 5개의 막대안에, 각각 A,B,C 3개의 종류의 데이터를 만들어본다. 

set.seed(1239834)
tb = tibble(x = rep(1:5, each = 3), 
            y = sample(20:70, 15), 
            z = rep(LETTERS[1:3], 5))
            
# A tibble: 15 × 3
       x     y z    
   <int> <int> <chr>
 1     1    69 A    
 2     1    56 B    
 3     1    43 C    
 4     2    34 A    
 5     2    50 B    
 6     2    68 C    
 7     3    38 A    
 8     3    48 B    
 9     3    67 C    
10     4    20 A    
11     4    44 B    
12     4    26 C    
13     5    57 A    
14     5    36 B    
15     5    31 C
반응형

데이터를 만드는 것에 비해, 분할막대그래프를 그리는건 간단하다. 직접 백분율을 구하기 위해 더해서 나누는 작업 없이 그냥 "fill" 이란 옵션만 정의하면된다.

ggplot(tb, aes(x,y, fill = z)) +
  geom_col(position = "fill", width = 0.6)

 

 

최종 디자인까지 적용한 버전이다. 위에 단위도 붙이고, 불필요한 간격 및 선을 없애고, 색을 입히면 깔끔한 그래프가 완성된다.

ggplot(tb, aes(x,y, fill = z)) +
  geom_col(position = "fill", width = 0.6) + 
  coord_cartesian(xlim = c(0.5,5.5), clip = "off") +
  scale_x_continuous(breaks = 1:5, labels = c("가", "나", "다", "라", "마")) +
  scale_y_continuous(expand = expansion(0),
                     labels = seq(0,100,25)) +
  scale_fill_manual(values = c("#9ecae1", "#4292c6", "#08519c"))+
  theme_minimal(base_family = "AppleSDGothicNeo-ExtraBold", base_size = 13) +
  theme(
    axis.title = element_blank(),
    legend.title = element_blank(),
    plot.margin = margin(1,0.5,0.7,1, "cm"),
    panel.grid = element_blank(),
    panel.grid.major.y = element_line(colour = c("#bdbdbd"), size = 0.3),
    axis.line.x = element_line(size = 0.7),
    axis.text.x = element_text(size = 14,
                               margin = margin(3,0,0,0, "mm")),
    axis.text.y = element_text(hjust = 0.5, family = "AppleSDGothicNeo-Bold")
  ) +
  annotate("text", x = -0, y = 1.1, label = "(%)",
           family = "AppleSDGothicNeo-Medium", size = 4)
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함