聰明不如鈍筆
총명불여둔필
assignment KindeR

R로 와플 차트 그리기(feat. waffle)


사람들이 흔히 '와플 차트'라고 부르는 그래프 종류가 있습니다. 영어로도 'waffle chart'입니다. 더러는 '스퀘어 파이 차트(square pie chart)'라고 부르기도 합니다.


이 포스트를 읽으시면서 이 표현을 처음 접하신 분이라고 해도 아래 그림 같은 그래프는 자주 접하셨을 겁니다. 이런 그래프가 바로 와플 차트입니다. 위 아래 이미지를 비교해 보시면 왜 이런 이름이 붙었는지 이해가 가시죠?



우리가 이 포스트에서 사용하게 될 R는 아주 훌륭한 시각화 도구이기도 하고 당연히 와플 차트도 그릴 수 있습니다. 패키지 하나만 설치하면 말입니다. 와플 차트를 그릴 때 필요한 패키지 이름은? 네, 'waffle'입니다. (아, R를 대표하는 시각화 패키지 ggplot2를 아직 설치하지 않으셨다면 ggplot2까지 두 개를 설치하셔야 합니다.)


R에서 패키지를 설치할 때는 install.packages()라는 함수를 씁니다. R 콘솔에 이렇게만 입력하시면 알아서 waffle 패키지를 설치합니다.

install.packages('waffle')


만약 ggplot2를 설치하지 않으셨다면 마찬가지로 install.packages('ggplot2')를 입력하시면 됩니다.


R에서는 패키지를 설치했다고 곧바로 사용할 수 있게 되는 건 아닙니다. library()라는 함수를 써서 이 패키지를 메모리에 불러오는 과정이 필요합니다. 이렇게 쓰면 되겠죠?

library('waffle')


그러면 자동으로 ggplot2 패키지도 불러옵니다. 그러니 library('ggplot2')는 생략하셔도 됩니다.


그래프를 그리려면 데이터가 필요합니다. 한번 위에서 본 와플 차트를 직접 그려볼까요?


이 와플 차트는 황금색 블록 43개, 남색 블록 11개, 파란색 블록 46개가 뭉쳐 있는 형태입니다. 이 숫자 세 개를 w라는 변수에 넣어보도록 하겠습니다.

w <- c(43, 11, 46)


여기서 '<-' 기호는 오른쪽 값을 왼쪽에 있는 변수에 넣으라는 뜻이고, c()는 '사슬같이 잇다(concatenate)'는 뜻에서 유래한 함수로 데이터 여러 개를 묶을 때 씁니다.


어떤 변수가 어떻게 생겼는지 알아보려면 변수 이름만 치면 됩니다.

w
[1] 43 11 46


데이터를 확보했으니 이제 직접 그래프를 그릴 차례. 와플 차트를 그릴 때 쓰는 함수는 waffle()입니다. 일단 변수 이름만 가지고 와플 차트를 그려보겠습니다.

waffle(w)

첫 시도 치고는 나쁘지 않게 나왔습니다. 이제 조금씩 변형을 해봅시다.


이 와플 차트는 기본적으로 행과 열 모두 10개인 10×10 구조이고 처음에 우리가 만들려고 했던 그림도 마찬가지입니다.


만약 이 그래프를 가로로 긴 형태로 만들고 싶을 때는 어떻게 하면 될까요? 그럴 때는 행(rows) 숫자를 바꿔주면 됩니다. 이렇게 말입니다.

waffle(w, rows=5)


물론 세로로 길게 하고 싶을 때는 rows 뒤에 오는 숫자를 늘려주면 그만입니다.


이번에는 색깔을 바꿔보겠습니다. 위에서 제가 황금색, 남색, 파란색이라고 부른 색깔을 웹페이지를 표시할 때 쓰는 HTML 색상 코드로 바꾸면 각각 '#e0b151', '#1d93bc', '#2dbbdd'에 해당합니다. 이 색깔로 그리라고 R에게 명령해보겠습니다.

waffle(w, colors=c('#e0b151', '#1d93bc', '#2dbbdd'))

조금 더 비슷한 모양이 됐습니다. 지금 눈에 띄는 차이가 있다면 위에서 본 와플 차트는 위에서부터 색을 채우는 데 우리가 그리고 있는 차트는 왼쪽에서부터 채운다는 것. 아래처럼 ggplot() 문법을 가져와 차트를 뒤집는 코드를 쓰면 에러 메시지는 나오지만 모양 자체는 똑같이 그릴 수 있습니다.

waffle(w, colors=c('#e0b151', '#1d93bc', '#2dbbdd')) + scale_x_reverse() + coord_flip()

처음에 소개한 그래프와 똑같은 모양으로 그리려고 ggplot()에서 함수를 가져왔을 뿐 waffle() 자체고 flip, reverse 속성을 바꿀 수 있도록 하고 있습니다. 아래처럼 두 속성 모두 'TRUE'를 주면 이런 모양을 얻을 수 있습니다.

waffle(w, colors=c('#e0b151', '#1d93bc', '#2dbbdd'), reverse=TRUE, flip=TRUE)

지금까지는 모양을 만드느라 범례(legend)를 계속 A, B, C로 나뒀습니다. 이건 처음에 w에 숫자만 넣었기 때문에 waffle()에서 기본 이름을 붙인 겁니다. 데이터를 만드실 때 '항목 이름=숫자' 형태로 넣으면 자동으로 이름이 바뀝니다. 물론 한글도 문제 없습니다.

w <- c(가=43, 나=11, 다=46)
waffle(w)

범례 위치가 꼭 오른쪽일 필요는 없겠죠? 범례 위치는 legend_pos 속성에 'top'(위), 'bottom'(아래), 'left'(왼쪽)', 'right'(오른쪽·기본), 'none'(없음)을 줘서 바꿀 수 있습니다. 우리는 연습 삼아 아래로 옮겨 볼까요?

waffle(w, legend_pos='bottom')


이 정도면 와플 차트가 필요하실 때 R에서 어떻게 그려야 하는지 감을 잡으셨을 줄로 믿습니다. 그럼 Happy Charting!


댓글,

KindeR | 카테고리 다른 글 더 보기