사용데이터 : https://2stndard.tistory.com/68
와플 차트
와플은 아마도 한번 정도는 먹어본 음식일 것이다. 아이스크림이나 달콤한 시럽이 얹혀진 이 파이인듯, 빵인듯, 케이크인 둣한 음식의 표면은 작은 네모들로 가득하다.
여기에서 영감을 얻은 것같은 와플 차트는 작은 사각형으로 전체 영역을 나누고 각 변량이 차지하는 비율만큼 사각형을 각 변량에 포함시킴으로써 데이터를 시각화한다.
와플 차트는 구현하는 방법은 전체를 작은 사각형으로 나누어서 그 변량의 비율만큼 작은 사각형을 표현하는 방법과 막대그래프의 변형된 형태의 두 가지로 나눌 수 있다. 첫 번째 방법은 파이 차트의 변형으로 geom_tile()
을 사용해서 구현하고, 두 번째 방법은 막대 그래프의 변형으로 waffle
패키지의 geom_waffle()
을 사용해서 구현이 가능하다.
geom_tile()의 사용
geom_tile()
을 사용하여 와플 차트를 그리기 위해서는 다른 시각화에는 수행하지 않았던 전처리 작업이 필요하다. 먼저 와플 차트에서 사용할 사각형의 갯수를 결정해야 하고 전체 비율을 이 사각형의 갯수로 변환하는 작업이다. 예를 들어 전체 사각형이 100 개인 와플 차트라면 비율을 소수점 한자리에서 반올림해 소수점을 없애고 각각의 백분률만큼 사각형을 배치하면 되겠지만 150 개인 와플차트라면 각각의 비율에 1.5 를 곱해야 할 것이다.
vec_waffle <- df_취업률 |>
select(대계열) |>
pull()
nrows <- 15
df_waffle <- expand.grid(y = 1:nrows, x = 1:nrows)
freq_table <- round(table(vec_waffle) * ((nrows*nrows)/(length(vec_waffle)))) ## freq_table
df_waffle$대계열 <- factor(rep(names(freq_table), freq_table))
df_waffle |> ggplot(aes(x = x, y = y, fill = 대계열)) +
geom_tile(color = "black", size = 0.5) +
scale_fill_brewer(palette = "Set3") +
theme_void() +
labs(title="대계열 학과수 Waffle Chart", fill = '대계열')
위에서 본 바와 같은 와플 차트는 원으로 구성된 파이 그래프를 네모로 표현한 것과 유사한 형태로 전체에 대한 비율을 표현한다. 다만 이를 사각형에 표현해야하기 때문에 작은 타일로 그 면적을 구성하고 이 타일의 수로 면적을 비교할 수 있도록 구현한 시각화이다. 하지만 이 시각화는 전체에 대한 면적을 비율로 표현한 것이기 때문에 하나의 변량에 대해서면 표현이 가능하다는 단점이 있다. 만약 위의 와플 차트를 전문대, 대학, 대학원별로 표현하려면 이와 유사한 와플차트가 3개가 필요할 것이다. 이와 같이 2개 이상의 변량에 대한 와플 차트를 구현하기 위해서는 다음의 막대 그래프의 변형인 와플 차트를 그려야 한다.
waffle 패키지의 geom_waffle()의 사용
막대 그래프를 사용할 때 몇가지 단점이 있는데 이 중 하나가 쌓아올린(Stacked) 막대 그래프에서 맨 아래 변량은 막대간의 비교가 가능하지만 그 위에 올라간 두 번째 막대부터는 그 변량의 크기를 비교하기가 쉽지 않다는 것이다. 물론 변량의 크기가 많이 나는 경우에야 눈대중으로 그 크기를 비교할 수 있겠지만 비슷 비슷한 크기일 경우는 비교가 쉽지 않다.
이러한 막대 그래프의 단점을 보완한 것이 와플 차트이다. 와플 차트는 막대의 표현을 작은 사각형으로 나누어 해당 변량의 크기 만큼 사각형으로 구성하여 막대를 표현한다. 따라서 막대를 구성하는 사각형의 갯수를 사용해 막대의 변량을 비교할 수 있다.
이러한 막대그래프 변형의 와플 차트는 ggplot2
에서 직접적으로 지원하지 않는다. 따라서 이를 그리기 위해서는 waffle
패키지를 설치하고 geom_waffle()
을 사용하여야 한다.
if (!require(waffle)) {
remotes::install_github("hrbrmstr/waffle")
library(waffle)
}
df_취업률 |>
group_by(과정구분, 대계열) |>
summarise(n = n()) |>
ggplot() +
geom_waffle(aes(fill = 대계열, values = n), color = 'white',
size = 0.5,
n_rows = 5,
flip = TRUE,
make_proportional = TRUE) +
facet_wrap(~과정구분, nrow = 1, strip.position = "bottom") +
scale_x_discrete(breaks = scales::pretty_breaks()) +
labs(title = "교육과정별 대계열 학과수",
caption = "Source: 한국교육개발원 교육통계서비스") +
theme(
axis.text.y = element_blank(),
panel.grid = element_blank(),
legend.title = element_blank(),
text = element_text(size=15),
plot.title = element_text(hjust = 0.5,
size = 25,
face = "bold"),
plot.caption = element_text(size = 15,
color = "blue",
face = "bold"),
plot.caption.position = "plot"
)
'ggplot2' 카테고리의 다른 글
밀도 분포 플롯(geom_density) in R (0) | 2022.06.12 |
---|---|
박스 플롯(Boxplot) in R (0) | 2022.06.11 |
산키(sankey) 다이어그램 in R (5) | 2022.05.15 |
ggplot2 축 눈금 간격과 눈금 레벨 설정 in R (0) | 2022.05.05 |
ggplot 이어 붙이기와 영국 이코노미스트지 스타일의 시각화 - 전문대학의 위기 (9) | 2022.05.02 |
댓글