앞서 작업한 분당지역 득표 데이터와 지도 데이터를 함께 가져와서 후속 작업을 준비한다.
library(tidyverse)
library(sf)
`분당을` <- c("구미동", "구미1동", "금곡동", "분당동", "수내1동", "수내2동", "수내3동",
"정자동", "정자1동", "정자2동", "정자3동")
## 분당 득표 데이터
`분당_df` <- read_rds("data/분당_df.rds")
## 분당 지도 데이터
hjd_sf <- st_read("data/shapefile/HangJeongDong_ver2018xxxx_for_update.geojson")
Reading layer `HangJeongDong_ver2018xxxx_for_update' from data source `C:\work\election\data\shapefile\HangJeongDong_ver2018xxxx_for_update.geojson' using driver `GeoJSON'
Simple feature collection with 3504 features and 3 fields
geometry type: MULTIPOLYGON
dimension: XY
bbox: xmin: 124.6097 ymin: 33.11187 xmax: 131.8713 ymax: 38.61695
epsg (SRID): 4326
proj4string: +proj=longlat +datum=WGS84 +no_defs
bundang_sf <- hjd_sf %>%
filter(str_detect(adm_nm, "분당구")) %>%
mutate(`읍면동명` = str_extract(adm_nm, "(\\w+)$")) %>%
filter(`읍면동명` %in% `분당을`)
앞서 작업한 분당지역 득표 데이터와 지도 데이터를 함께 가져와서 후속 작업을 준비한다.
## 데이터 병합
`분당_2018_df` <- `분당_df` %>%
filter(str_detect(`선거`, "2018")) %>%
select(-`선거`)
bundang_map_sf <- left_join(bundang_sf, `분당_df`, by="읍면동명") %>%
filter(!is.na(`민주당`))
bundang_map_sf %>%
ggplot(aes(fill=`민주당`)) +
geom_sf() +
facet_wrap(~`선거`)
## 주민자치단체 위경도 : 성남시 - 분당구와 행정동, election_sigungu_sungnam_dong.html
bundang_lonlat_df <- read_rds("data/shapefile/bundang_lonlat_df.rds") %>%
rename(`읍면동명` = `주민센터명`) %>%
filter(`읍면동명` %in% `분당을`) %>%
select(`읍면동명`, lon, lat)
bundang_map_sf <- left_join(bundang_map_sf, bundang_lonlat_df)
## 마커 시각화
library(leaflet)
bundang_map_sf %>%
filter(str_detect(`선거`, "2018")) %>%
leaflet() %>%
addTiles() %>%
addProviderTiles(providers$OpenStreetMap) %>%
addMarkers(lng=~lon, lat=~lat, clusterOptions = markerClusterOptions(),
popup = ~ as.character(paste0("<strong>", paste0("읍면동명: ", `읍면동명`), "</strong><br>",
"-----------------------------------------------------------<br>",
"· 민주당: ", scales::comma(`민주당`), "<br>",
"· 자한당: ", scales::comma(`자한당`), "<br>",
"· 바미당: ", scales::comma(`바미당`), "<br>",
"· 정의당: ", scales::comma(`정의당`), "<br>")))
bundang_map_2018_sf <- bundang_map_sf %>%
filter(str_detect(`선거`, "2018"))
## 팔레트
vote_bins <- c(0, 2000, 4000, 6000, 8000, 10000)
vote_pal <- colorBin("PuBu", domain = bundang_map_2018_sf$`민주당`, bins = vote_bins)
## 라벨
dong_labels <- sprintf(
"<strong>%s</strong><br/>",
bundang_map_2018_sf$`읍면동명`) %>% lapply(htmltools::HTML)
bundang_map_2018_sf %>%
leaflet() %>%
addTiles() %>%
addProviderTiles(providers$OpenStreetMap) %>%
addMarkers(lng=~lon, lat=~lat, clusterOptions = markerClusterOptions(),
popup = ~ as.character(paste0("<strong>", paste0("읍면동명: ", `읍면동명`), "</strong><br>",
"-----------------------------------------------------------<br>",
"· 민주당: ", scales::comma(`민주당`), "<br>",
"· 자한당: ", scales::comma(`자한당`), "<br>",
"· 바미당: ", scales::comma(`바미당`), "<br>",
"· 정의당: ", scales::comma(`정의당`), "<br>"))) %>%
addPolygons(opacity = 1.0, fillOpacity = 0.9,
weight = 1,
highlightOptions = highlightOptions(color = "black", weight = 3, bringToFront = TRUE),
label = dong_labels,
fillColor = ~vote_pal(`민주당`),
labelOptions = labelOptions(
style = list("font-weight" = "normal", padding = "3px 8px"),
textsize = "15px",
direction = "auto")) %>%
addLegend("bottomright", pal = vote_pal, values = ~`민주당`,
title = "민주당 득표",
labFormat = labelFormat(suffix = "명"),
opacity = 1)