티스토리 뷰

ggplot2 로 아래와 같이 막대그래프를 그려본다. 막대그래프를 하나만 그리는게 아니라 막대뒤에 어두운 색으로 하나 더 그려줬다. y축을 표시하지 않는 대신, 어느정도 최대치 높이까지 채워졌는지 느낌을 준 정도이다. 

 

데이터를 먼저 만들어놓는다. x축 10개의 값을 만들고, 높이y를 랜덤하게 sample 함수를 이용해서 10~60사이로 정한다. 마지막으로 막대그래프가 다 같은 색이면 단조로울거 같아서 z필드에 a, b 2개의 유형을 정의했다.

tb1 = tibble(x = 1:10, y = sample(10:60, 10), z = rep(letters[1:2], 5))
tb1
# A tibble: 10 × 3
       x     y z    
   <int> <int> <chr>
 1     1    32 a    
 2     2    44 b    
 3     3    24 a    
 4     4    57 b    
 5     5    16 a    
 6     6    25 b    
 7     7    20 a    
 8     8    47 b    
 9     9    45 a    
10    10    21 b

 

x, y 축을 정의하고, fill 에다가 z 를 할당하면 아래와 같이 2개의 색깔이 번갈아가면서 만들어진다.

ggplot(tb1, aes(x,y)) +
  geom_col(aes(fill = z), width = 0.7)

반응형

막대그래프에 z 필드를 가지고 색상을 채웠는데, 색상이 디폴트다보니 맘에 들지 않는다. fill 에 할당된 색을 재정의 할 수 있는데, 손수 하나씩 할당하는 scale_fill_manual 함수를 사용하면 된다. 보라색 계열 2개를 색상을 골라서 셋팅해봤다. 추가로 theme_bw 로 테마를 셋팅해봤는데, 잘 모르면 빼도 된다.

ggplot(tb1, aes(x,y,fill = z)) +
  geom_col(width = 0.7) +
  scale_fill_manual(values = c("#9F9EBF", "#7070A2")) +
  theme_bw()

 

막대그래프 상단에 텍스트를 추가해본다. geom_text 함수를 이용하면 되고, y 축 값을 label 에 셋팅하면 끝. family 에 맘에 드는 폰트를 지정하면 조금 더 디자인이 살아난다.

ggplot(tb1, aes(x,y,fill = z)) +
  geom_col(width = 0.7) +
  geom_text(aes(label = y), 
            colour = "gray100", vjust = 2, 
            family = "BMJUAOTF", size = 5) +
  scale_fill_manual(values = c("#9F9EBF", "#7070A2")) +
  theme_bw()

 

 

마지막으로 배경색을 입히고 원래 만들었던 막대그래프 뒤에 배경색보다 조금 더 어두운 색을 지정하기 위해서 geom_col 을 하나 더 추가한다. 그리고 x축에 숫자가 아닌 A~J 까지의 텍스트로 정의해준다.(scale_x_continuous) ~끝.

v_background_color = "#334960"
v_font_color = "gray100"

tibble(x = 1:10, y = sample(10:60, 10), z = rep(letters[1:2], 5)) %>% 
  ggplot(aes(x,y)) +
  geom_col(aes(x = 1:10, y = 60), fill = "#2D4054", width = 0.7) +
  geom_col(aes(fill = z), width = 0.7) +
  geom_text(aes(label = paste0("$",y)), vjust = 2, colour = v_font_color,
            family = "BMJUAOTF", size = 5) +
  scale_fill_manual(values = c("#9F9EBF", "#7070A2")) +
  scale_x_continuous(breaks = 1:10, labels = LETTERS[1:10]) +
  theme_void(base_family = "BMJUAOTF") +
  theme(legend.position = "none",
        axis.text.x = element_text(colour = v_font_color, size = 15),
        plot.background = element_rect(fill = 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
글 보관함