인터넷상에서 내가 배울만한 그래프를 찾아보는 편인데, 좀 특이한 막대그래프가 있어서 따라해봤다. 기본틀은 막대그래프인데, 그안에 타일모양으로 구성시켜 조금은 특이한 그래프이다. 아래 그래프와 같은 구조이며, 각 막대그래프위에 숫자표시까지해서 마무리했다.
그래프 데이터 만들기
막대그래프이긴하나 타일구조를 만들어야 하니, geom_tile
함수를 이용하기로 한다. 데이터를 만들때, 각 타일의 위치를 나타내도록 x,y 좌표값을 셋팅해야 한다. 예를 들어 (1,1), (1,2), (1,3), (1,2)
이렇게 총 4개의 쌍의 x,y 좌표를 만들어 봤다.
tb1 = tibble(x = c(1,2,3,1),
y = c(1,1,1,2))
# A tibble: 4 × 2
x y
<dbl> <dbl>
1 1 1
2 2 1
3 3 1
4 1 2
그래프 만들기
데이터가 만들어졌으니, 해당 데이터를 가지고 간단히 그래프를 그려본다. geom_tile
을 사용할 건데, 좌표만 설정이 되면 네모모양의 타일이 그 위치에 그려진다. (x, y)
값이 4쌍이니, 4개의 타일이 그려지고, 조금 여백을 주기위해, size = 2
로 간격을 더 두껍게 셋팅한다.
ggplot(tb1, aes(x, y, fill = factor(1))) +
geom_tile(size = 2, colour = "gray100") +
coord_fixed()
타일을 하나씩 늘리려고하면, 데이터만 추가하면 된다. x = 2, y = 2
위치에 타일을 추가한 예시이며, 조금 강조하기위해서 색상을 z
값을 추가해서, fill
설정을 한다. 초록색 부분이 추가된 타일이다.
tb1 = tibble(x = c(1,2,3,1,2),
y = c(1,1,1,2,2),
z = c(1,1,1,1,2))
# A tibble: 5 × 3
x y z
<dbl> <dbl> <dbl>
1 1 1 1
2 2 1 1
3 3 1 1
4 1 2 1
5 2 2 2
ggplot(tb1, aes(x, y, fill = factor(z))) +
geom_tile(size = 2, colour = "gray100") +
coord_fixed()
근데 문제는 그렇게 하나씩 일일이 추가할 수는 없고, 좀 다른 방법을 찾아야한다. 아래는 18개의 타일을 가로로 5개씩 쌓는 구조를 그리기위해 만든 데이터이며, 최초에 18이란 값만 셋팅하면 되니 조금 더 편해지긴 했다.
tb1 = tibble(v = 1:18) %>%
mutate(x1 = v %% 5) %>%
mutate(x2 = ifelse(x1 == 0, 5, x1)) %>%
mutate(y1 = (v-1) %/% 5) %>%
mutate(y2 = y1 + 1) %>%
select(x2, y2)
# A tibble: 18 × 2
x2 y2
<dbl> <dbl>
1 1 1
2 2 1
3 3 1
4 4 1
5 5 1
6 1 2
7 2 2
8 3 2
9 4 2
10 5 2
11 1 3
12 2 3
13 3 3
14 4 3
15 5 3
16 1 4
17 2 4
18 3 4
이 데이터를 가지고 그래프를 그리면 가로 5개씩 타일이 쌓여 총 18개의 타일로 구성된 막대그래프가 그려진다.
ggplot(tb1, aes(x2, y2, fill = factor(1))) +
geom_tile(size = 1, colour = "gray100") +
coord_fixed()
이 개념만 잘 자리가 잡혔다면 더 확장해볼 수 있다. facet_wrap
함수를 이용하면, 이런 그래프를 한판에 여러개 만들 수가 있는데 중요한건 데이터 이다. 그에 맞게 데이터를 재구성 하면 된다.
ggplot(tb1, aes(x, y, fill = factor(g))) +
geom_tile(size = 1,
colour = "gray100") +
facet_wrap(~factor(g, v_ord), nrow = 1) +
coord_fixed() +
theme_bw() +
theme(legend.position = "none",
axis.title = element_blank())
마지막으로 텍스트 추가, 색상변경, 폰트 등을 셋팅해서 마무리하면 끝이다. 만들고 보니 약간 건물형상처럼 보이기도 한다. 아파트관련 데이터를 나타낼때, 각층에 사는세대가 4~5개이면 그것에 맞춰 그래프를 만들면 한눈에 현황이나 조사결과를 표현할 수도 있을 것 같다.