챕터 10 대한민구 인구수 변화 시각화

library(gganimate)

population <- datatoys::population
population <- subset(population, 행정구역별 != "황해도" & 행정구역별 != "평안북도" & 행정구역별 != "평안남도" & 행정구역별 != "함경북도" & 행정구역별 != "함경남도" & 행정구역별 != "함경북도")
population <- population %>%
  mutate(
    행정구역별 = recode(행정구역별, "서울특별시" = "서울", "부산광역시" = "부산", "충청북도" = "충북", "충청남도" = "충남", 
                   "전라북도" = "전북", "전라남도" = "전남", "경상북도" = "경북", "경상남도" = "경남", "대구광역시" = "대구", 
                   "광주광역시" = "광주", "대전광역시" = "대전", "울산광역시" = "울산", "인천광역시" = "인천", "경기도" = "경기", 
                   "강원도" = "강원", "제주도" = "제주", "세종특별자치시" = "세종", "제주특별자치도" = "제주")
  ) %>%
  group_by(행정구역별, 연도) %>%
  summarise(
    인구수_10000 = round(sum(인구수, na.rm = TRUE) / 10000)
  ) %>%
  ungroup() %>%
  group_by(연도) %>%
  arrange(연도, desc(인구수_10000)) %>%
  mutate(
    rank = row_number(),
    인구수_char = paste0(" ", 인구수_10000)
  ) %>%
  ungroup()

area_palette <- c(
  "경남" = "#FF65AE",
  "경북" = "#FF65AE",
  "대구" = "#F763E0",
  "울산" = "maroon",
  "부산" = "lightpink1",
  "전남" = "wheat",
  "전북" = "wheat",
  "광주" = "tan",
  "경기" = "lightblue2",
  "서울" = "steelblue1",
  "인천" = "turquoise",
  "충남" = "gold",
  "충북" = "gold",
  "대전" = "yellow2",
  "세종" = "goldenrod2",
  "강원" = "seagreen3",
  "제주" = "darkgrey"
)

total_population <- ggplot(population, aes(rank, group = 행정구역별)) +
  geom_tile(aes(
    y = 인구수_10000 / 2,
    height = 인구수_10000,
    width = 0.9, fill = 행정구역별), 
    alpha = 0.8) +
  geom_text(aes(y = 0, label = paste(행정구역별, " ")), vjust = 0.2, hjust = 1, size = 5, family = "AppleSDGothicNeo-SemiBold") +
  geom_text(aes(y = 인구수_10000, label = 인구수_char, hjust = 0)) +
  theme_minimal(base_family = "AppleSDGothicNeo-SemiBold") +
  theme(
    axis.text.x = element_text(size = 15, color = "grey3", face = "bold"),
    axis.title = element_text(size = 17, color = "grey21", face = "bold"),
    legend.position = "none",
    plot.title = element_text(hjust = 0.5, size = 22, color = "royalblue4", face = "bold"),
    axis.line = element_blank(),
    axis.text.y = element_blank(),
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.grid.major.x = element_line(size = 0.1, color = "grey"),
    panel.grid.minor.x = element_line(size = 0.1, color = "grey"),
    plot.background = element_blank()
  ) +
  transition_states(연도,
                    transition_length = 40,
                    state_length = 10
  ) +
  scale_y_continuous(breaks = seq(0, 1500, 250), labels = scales::comma) +
  scale_x_reverse() +
  scale_fill_manual(values = area_palette) +
  labs(
    title = "{closest_state}년 대한민국 지역별 인구수",
    subtitle = "1925-2021년",
    caption = "KOSTAT; 인구총조사(통계청)",
    x = "",
    y = "지역별 총 인구(만명)"
  ) +
  coord_flip() +
  ease_aes("quartic-in-out") +
  enter_fade()

animate(plot = total_population, nframes = 400, end_pause = 20, width = 1080, height = 720)