애플워치의 운동기록을 표현될 때, 링(Ring) 모양의 그래프로 표시된다. ggplot2
를 가지고 이런 링모양의 그래프를 그릴 수 있을지 한번 그려봤다. 기본 컨셉은 흔한 도넛 차트인데, 막대의 각 끝에 부드럽게 라운딩 처리만 추가해봤다. 라운딩 처리를 ggplot2
패키지에서 기본지원해주면 좋으련만 그런 옵션이 없다보니, geom_point
로 덧붙여서 비슷한 효과를 냈다.
그래프 데이터 만들기
이번 그래프의 데이터는 정말 간단하다. x/y 값 4개의 쌍으로만 이루어져 있으면 만들 수 있다.
tb1 = tibble(x = 1:4,
y = sample(20:100, 4, replace = T))
# A tibble: 4 × 2
x y
<int> <int>
1 1 82
2 2 37
3 3 23
4 4 31
그래프 그리기
처음에는 간단히 막대그래프를 그려준다.
ggplot(tb1, aes(x,y, fill= factor(x))) +
geom_col()
coord_polar
함수를 이용해서 도넛차트를 만들어 준다. lims
함수로 y
옵션에 0~100 범위를 셋팅해야 하는데, 이걸 셋팅하지 않으면, y 값중에 가장 높은 수치를 가지고 원 모양이 만들어지다보니, 정확한 백분율의 느낌을 주기위해 셋팅이 필요했다.
# 왼쪽 그래프
ggplot(tb1, aes(x,y, fill= factor(x))) +
geom_col() +
coord_polar(theta = "y") +
lims(y = c(0, 100))
# 오른쪽 그래프
ggplot(tb1, aes(x,y, fill= factor(x))) +
geom_col() +
coord_polar(theta = "y") +
lims(x = c(-2, 5), y = c(0, 100))
마지막으로 도넛차트 끝에 둥글게 라운딩처리를 해야 한다. geom_point
함수를 이용해서 둥글게 만들었는데, size
를 지정하는게 너무 어려웠다. 눈으로 봐가면서 수치를 조정하다보니, 시간이 좀 걸린다. 기본 그래프는 완성되었다.
ggplot(tb1, aes(x,y, fill= factor(x))) +
geom_col() +
geom_point(aes(x = x, y = 0, color = factor(x)), size = v_point_size) +
geom_point(aes(color = factor(x)), size = v_point_size) +
coord_polar(theta = "y") +
lims(x = c(-2, 5), y = c(0, 100))
마지막으로, facet_wrap
함수를 이용해서 여러차트를 한판에 만들고, 폰트/색상 등 조정하면 아래와 같은 그래프를 만들 수 있다.