Membuat peta choropleth sebaran jumlah penduduk Kota Bogor menurut Kecamatan.
Persiapan Data
# opsional, jika belum terinstall
# install.packages(c("sf","dplyr"))
library(sf)
library(dplyr)
# membaca shape file
# SHP dari humdata: https://ipb.link/humdata-indonesia-shp
mapIndonesia <- st_read("map/shp/idn_admbnda_adm3_bps_20200401.shp",
quiet = TRUE)
glimpse(mapIndonesia)
## Rows: 7,069
## Columns: 17
## $ Shape_Leng <dbl> 0.2798656, 0.7514001, 0.6900061, 0.6483629, 0.2437073, 1.35~
## $ Shape_Area <dbl> 0.003107633, 0.016925540, 0.024636382, 0.010761277, 0.00116~
## $ ADM3_EN <chr> "2 X 11 Enam Lingkung", "2 X 11 Kayu Tanam", "Abab", "Abang~
## $ ADM3_PCODE <chr> "ID1306050", "ID1306052", "ID1612030", "ID5107050", "ID7471~
## $ ADM3_REF <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,~
## $ ADM3ALT1EN <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,~
## $ ADM3ALT2EN <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,~
## $ ADM2_EN <chr> "Padang Pariaman", "Padang Pariaman", "Penukal Abab Lematan~
## $ ADM2_PCODE <chr> "ID1306", "ID1306", "ID1612", "ID5107", "ID7471", "ID9432",~
## $ ADM1_EN <chr> "Sumatera Barat", "Sumatera Barat", "Sumatera Selatan", "Ba~
## $ ADM1_PCODE <chr> "ID13", "ID13", "ID16", "ID51", "ID74", "ID94", "ID94", "ID~
## $ ADM0_EN <chr> "Indonesia", "Indonesia", "Indonesia", "Indonesia", "Indone~
## $ ADM0_PCODE <chr> "ID", "ID", "ID", "ID", "ID", "ID", "ID", "ID", "ID", "ID",~
## $ date <date> 2019-12-20, 2019-12-20, 2019-12-20, 2019-12-20, 2019-12-20~
## $ validOn <date> 2020-04-01, 2020-04-01, 2020-04-01, 2020-04-01, 2020-04-01~
## $ validTo <date> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA~
## $ geometry <MULTIPOLYGON [°]> MULTIPOLYGON (((100.2811 -0..., MULTIPOLYGON (~
# membaca data penduduk dari csv
dataBogor <- read.csv("data/Penduduk-Bogor.csv")
dataBogor
# Join ke-dua table
mapBogor<- mapIndonesia %>%
inner_join(dataBogor, by = c("ADM3_PCODE" = "KodeBPS"))
mapBogor
Peta Leaflet
# opsional, jika belum terinstal
# install.packages("leaflet")
library(leaflet)
# membuat custom palette warna
populationPalette <- colorNumeric(
palette = "YlGnBu",
domain = mapBogor$JumlahPenduduk
)
# membuat custom popup
popupLabel <- paste0(
"<b>Kecamatan ", mapBogor$Kecamatan,"</b><br/>",
"Jumlah Penduduk (jiwa): ", mapBogor$JumlahPenduduk, "<br/>",
"Luas Wilayah (km2): ", mapBogor$LuasWilayah, "<br/>",
"Kepadatan Penduduk (jiwa/km2): ", mapBogor$KepadatanPenduduk) %>%
lapply(htmltools::HTML)
# membuat peta leaflet
m <- leaflet(mapBogor) %>%
# Provider basemap: https://leaflet-extras.github.io/leaflet-providers/preview/
addProviderTiles(providers$CartoDB.PositronNoLabels, group = "Light Mode") %>%
addProviderTiles(providers$CartoDB.DarkMatterNoLabels, group = "Dark Mode") %>%
addPolygons(weight = 1,
opacity = 1,
fillOpacity = 0.9,
label = popupLabel,
color = ~populationPalette(JumlahPenduduk),
highlightOptions = highlightOptions(color = "white",
weight = 2,
bringToFront = TRUE) ) %>%
addLegend(position = "bottomright",
pal = populationPalette,
values = ~JumlahPenduduk,
title = "Jumlah Penduduk",
opacity = 1) %>%
addLayersControl(position = 'topright',
baseGroups = c("Light Mode", "Dark Mode"),
options = layersControlOptions(collapsed = FALSE)) %>%
setView(lat = - 6.595, lng = 106.87, zoom = 12)
# tampilkan
m
Penjelasan:
leaflet()
: inisiasi peta dengan memanggil fungsileaflet()
addProviderTiles()
: menambahkan peta dasar (base map) dengan perintah. Bisa juga denganaddTiles()
untuk peta dasar defaultaddPolygons()
: menabahkan poligon dengan gradasi warna berdasarkan jumlah penduduk. Pengaturan warna gradasi menggunakancolorNumeric()
. Ditambahkan pula opsi label untu menampilkan popup, yang akan muncul ketika pengguna menyorot area tertentu.addLegend()
: menambahkan legendaaddLayersControl()
: menampilkan tombol untuk memilih layer yang akan ditampilkansetView()
: mengatur posisi dan zooming default
Blog: https://nurandi.id/, Email: nur.andi@apps.ipb.ac.id↩︎