Peta yang digunakan adalah Peta Administratif tingkat Kabupaten/Kota seluruh Indonesia (Update 2020) yang didapat dari Praktikum 3. Data tabular yang digunakan adalah Persentase Penduduk Miskin Menurut Kabupaten/Kota Tahun 2024 yang bersumber dari BPS. Lokus wilayah yang digunakan adalah Kabupaten/Kota di Provinsi DI Yogyakarta. Link Sumber Data
Memanggil Library
library(sf) # mengelola dan menganalisis data geospasial
Linking to GEOS 3.13.1, GDAL 3.11.0, PROJ 9.6.0; sf_use_s2() is TRUE
library(tidyverse) # memanipulasi data dan visualisasi
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggspatial) # menambahkan elemen spasial ke dalam plot yang dibuat dengan ggplot2library(prettymapr) # membuat peta yang lebih estetiklibrary(dplyr) # manipulasi data, melakukan operasi data framelibrary(terra)
terra 1.8.60
Attaching package: 'terra'
The following object is masked from 'package:tidyr':
extract
library(ggsflabel)
Attaching package: 'ggsflabel'
The following objects are masked from 'package:ggplot2':
geom_sf_label, geom_sf_text, StatSfCoordinates
library(ggplot2)
Import Data Spasial dan Tabular
Import Data Spasial
# import data spasialkab_indo <-st_read("C:/Users/Rosita/Downloads/Kelompok_2_VisualisasiDataSpasial/idn_admbnda_adm2_bps_20200401.shp")
Reading layer `idn_admbnda_adm2_bps_20200401' from data source
`C:\Users\Rosita\Downloads\Kelompok_2_VisualisasiDataSpasial\idn_admbnda_adm2_bps_20200401.shp'
using driver `ESRI Shapefile'
Simple feature collection with 522 features and 14 fields
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: 95.01079 ymin: -11.00762 xmax: 141.0194 ymax: 6.07693
Geodetic CRS: WGS 84
kab_indo
Simple feature collection with 522 features and 14 fields
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: 95.01079 ymin: -11.00762 xmax: 141.0194 ymax: 6.07693
Geodetic CRS: WGS 84
First 10 features:
Shape_Leng Shape_Area ADM2_EN ADM2_PCODE ADM2_REF ADM2ALT1EN
1 2.360029 0.2289681 Aceh Barat ID1107 <NA> <NA>
2 1.963994 0.1541359 Aceh Barat Daya ID1112 <NA> <NA>
3 4.590182 0.2363958 Aceh Besar ID1108 <NA> <NA>
4 3.287754 0.3161611 Aceh Jaya ID1116 <NA> <NA>
5 4.448584 0.3430383 Aceh Selatan ID1103 <NA> <NA>
6 4.907219 0.1534414 Aceh Singkil ID1102 <NA> <NA>
7 2.593385 0.1745672 Aceh Tamiang ID1114 <NA> <NA>
8 3.676889 0.3834894 Aceh Tengah ID1106 <NA> <NA>
9 3.473021 0.3374562 Aceh Tenggara ID1104 <NA> <NA>
10 5.037148 0.4434042 Aceh Timur ID1105 <NA> <NA>
ADM2ALT2EN ADM1_EN ADM1_PCODE ADM0_EN ADM0_PCODE date validOn
1 <NA> Aceh ID11 Indonesia ID 2019-12-20 2020-04-01
2 <NA> Aceh ID11 Indonesia ID 2019-12-20 2020-04-01
3 <NA> Aceh ID11 Indonesia ID 2019-12-20 2020-04-01
4 <NA> Aceh ID11 Indonesia ID 2019-12-20 2020-04-01
5 <NA> Aceh ID11 Indonesia ID 2019-12-20 2020-04-01
6 <NA> Aceh ID11 Indonesia ID 2019-12-20 2020-04-01
7 <NA> Aceh ID11 Indonesia ID 2019-12-20 2020-04-01
8 <NA> Aceh ID11 Indonesia ID 2019-12-20 2020-04-01
9 <NA> Aceh ID11 Indonesia ID 2019-12-20 2020-04-01
10 <NA> Aceh ID11 Indonesia ID 2019-12-20 2020-04-01
validTo geometry
1 <NA> MULTIPOLYGON (((96.26836 4....
2 <NA> MULTIPOLYGON (((96.80559 3....
3 <NA> MULTIPOLYGON (((95.20544 5....
4 <NA> MULTIPOLYGON (((95.58431 4....
5 <NA> MULTIPOLYGON (((97.59461 2....
6 <NA> MULTIPOLYGON (((97.39178 2....
7 <NA> MULTIPOLYGON (((98.27612 4....
8 <NA> MULTIPOLYGON (((96.64762 4....
9 <NA> MULTIPOLYGON (((97.82461 3....
10 <NA> MULTIPOLYGON (((98.01772 4....
Filter Peta Kabupaten/Kota di Provinsi D I Yogyakarta
# memfilter data spasial hanya Provinsi D I Yogyakartadiy_kabkot <- kab_indo %>%filter(ADM1_EN =="Daerah Istimewa Yogyakarta")diy_kabkot
Simple feature collection with 5 features and 14 fields
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: 110.003 ymin: -8.20401 xmax: 110.8346 ymax: -7.541895
Geodetic CRS: WGS 84
Shape_Leng Shape_Area ADM2_EN ADM2_PCODE ADM2_REF ADM2ALT1EN
1 1.8320763 0.042281185 Bantul ID3402 <NA> <NA>
2 2.3936529 0.120912448 Gunung Kidul ID3403 <NA> <NA>
3 0.3413777 0.002697579 Kota Yogyakarta ID3471 <NA> <NA>
4 1.2755465 0.047138869 Kulon Progo ID3401 <NA> <NA>
5 1.5309696 0.047099670 Sleman ID3404 <NA> <NA>
ADM2ALT2EN ADM1_EN ADM1_PCODE ADM0_EN ADM0_PCODE
1 <NA> Daerah Istimewa Yogyakarta ID34 Indonesia ID
2 <NA> Daerah Istimewa Yogyakarta ID34 Indonesia ID
3 <NA> Daerah Istimewa Yogyakarta ID34 Indonesia ID
4 <NA> Daerah Istimewa Yogyakarta ID34 Indonesia ID
5 <NA> Daerah Istimewa Yogyakarta ID34 Indonesia ID
date validOn validTo geometry
1 2019-12-20 2020-04-01 <NA> MULTIPOLYGON (((110.351 -7....
2 2019-12-20 2020-04-01 <NA> MULTIPOLYGON (((110.8198 -8...
3 2019-12-20 2020-04-01 <NA> MULTIPOLYGON (((110.3591 -7...
4 2019-12-20 2020-04-01 <NA> MULTIPOLYGON (((110.2554 -7...
5 2019-12-20 2020-04-01 <NA> MULTIPOLYGON (((110.4531 -7...
# menampilkan peta Kab/Kota di Provinsi D I Yogyakartadiy_kabkot %>%# ingin menampilkan peta dari data frame diy_kabkotaggplot()+# memulai pembuatan grafik kosonggeom_sf()+# menampilkan peta ggsflabel::geom_sf_label_repel(aes(label=str_wrap(ADM2_EN, width =1)), size=1.75)+# ggsflabel untuk menambahkan label pada peta, geom_sf_label_repel agar label tidak tumpang tindih, str_wrap memisahkan 2 kata menjadi 2 baris, size untuk mengatur ukuran labeltheme_bw()+# memilih tema black and whitetheme(axis.title =element_blank()) # menghapus label sumbu (axis titles)
Warning in st_point_on_surface.sfc(data$geometry): st_point_on_surface may not
give correct results for longitude/latitude data
Import Data Tabular
# import data tabularpoverty_indo <-read_csv("C:/Users/Rosita/Downloads/Kelompok_2_VisualisasiDataSpasial/poverty-2024.csv")
Rows: 552 Columns: 2
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (1): Nama Wilayah
dbl (1): Persentase
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
poverty_indo
# A tibble: 552 × 2
`Nama Wilayah` Persentase
<chr> <dbl>
1 ACEH 14.2
2 Simeulue 17.7
3 Aceh Singkil 19.1
4 Aceh Selatan 12.0
5 Aceh Tenggara 12.0
6 Aceh Timur 13.3
7 Aceh Tengah 14.3
8 Aceh Barat 17.6
9 Aceh Besar 13.2
10 Pidie 18.6
# ℹ 542 more rows
Filter Data Kabupaten/Kota di Provinsi D I Yogyakarta
# memfilter data tabular hanya Kab/Kota di Provinsi D I Yogyakartapoverty_diy <- poverty_indo %>%filter(row_number() >which(poverty_indo$`Nama Wilayah`=="D I YOGYAKARTA") &# memfilter baris dari kolom Nama Variabel setelah D I Yogyakartarow_number() <= (which(poverty_indo$`Nama Wilayah`=="D I YOGYAKARTA") +5)) # sebanyak 5 baris karena jumlah Kab/Kota DI Yogyakarta ada 5poverty_diy # menampilkan hasil filter, pastikan penamaan Kab/Kota sudah sama dgn data spasial
# A tibble: 5 × 2
`Nama Wilayah` Persentase
<chr> <dbl>
1 Kulon Progo 15.6
2 Bantul 11.7
3 Gunung Kidul 15.2
4 Sleman 7.46
5 Kota Yogyakarta 6.26
Mengatur Peta
Menampilkan Peta dari OpenStreetMap
# menampilkan sistem informasi koordinat (CRS) dari data spasial yg digunakanst_crs(3857)$proj4string # menampilkan CRS EPSG:3857
st_crs(diy_kabkot)$proj4string # menampilkan CRS dari data spasial yg digunakan
[1] "+proj=longlat +datum=WGS84 +no_defs"
EPSG:3857 adalah sistem proyeksi Web Mercator. Web Mercator (EPSG:3857) merupakan proyeksi yang sering digunakan oleh peta digital dan aplikasi pemetaan seperti OpenStreetMap.
# mengubah (transformasi) CRS data spasial yg digunakan menjadi Web Mercator (EPSG:3857)diy_kabkot_osm <- diy_kabkot %>%st_transform(3857) # mengubah/transformasi CRS data spasial yg digunakanst_crs(diy_kabkot_osm)$proj4string # menampilkan CRS dari data spasial yg digunakan setelah ditransformasi
diy_kabkot_osm %>%ggplot() +# membuat plot menggunakan data spasial diy_kabkot_osmannotation_map_tile(type ="osm", zoomin =0) +# menambahkan peta OpenStreetMap sebagai latar belakang pada plotgeom_sf() +# membuat peta (menambahkan geometri spasial ke peta berdasarkan data diy_kabkot_osm) ggsflabel::geom_sf_label_repel(aes(label=str_wrap(ADM2_EN,width =1)),size=1.75) +# menambahkan label Kab/Kota dari kolom ADM2_EN, geom_sf_label_repel agar label tidak bertumpuk, str_wrap untuk memgatur agar teks tidak terlalu panjangtheme_bw() +# memilih tema black and whitetheme(axis.title =element_blank())
Zoom: 10
Menggabungkan Data Spasial dan Data Tabular
# menggunakan full join untuk mengidentifikasi nama Kab/Kota yg digunakan pada data spasial dan data tabular sudah sama, kemudian menampilkan seluruh kolom diy_p0 <- diy_kabkot %>%full_join(y = poverty_diy, # full join antara data spasial dan data tabularby =join_by(ADM2_EN ==`Nama Wilayah`)) # berdasarkan nama Kab/Kota, pada data spasial nama kolom Kab/Kota adalah ADM2_EN, pada data tabular nama kolom Kab/Kota adalah Nama Wilayahdiy_p0
Simple feature collection with 5 features and 15 fields
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: 110.003 ymin: -8.20401 xmax: 110.8346 ymax: -7.541895
Geodetic CRS: WGS 84
Shape_Leng Shape_Area ADM2_EN ADM2_PCODE ADM2_REF ADM2ALT1EN
1 1.8320763 0.042281185 Bantul ID3402 <NA> <NA>
2 2.3936529 0.120912448 Gunung Kidul ID3403 <NA> <NA>
3 0.3413777 0.002697579 Kota Yogyakarta ID3471 <NA> <NA>
4 1.2755465 0.047138869 Kulon Progo ID3401 <NA> <NA>
5 1.5309696 0.047099670 Sleman ID3404 <NA> <NA>
ADM2ALT2EN ADM1_EN ADM1_PCODE ADM0_EN ADM0_PCODE
1 <NA> Daerah Istimewa Yogyakarta ID34 Indonesia ID
2 <NA> Daerah Istimewa Yogyakarta ID34 Indonesia ID
3 <NA> Daerah Istimewa Yogyakarta ID34 Indonesia ID
4 <NA> Daerah Istimewa Yogyakarta ID34 Indonesia ID
5 <NA> Daerah Istimewa Yogyakarta ID34 Indonesia ID
date validOn validTo Persentase geometry
1 2019-12-20 2020-04-01 <NA> 11.66 MULTIPOLYGON (((110.351 -7....
2 2019-12-20 2020-04-01 <NA> 15.18 MULTIPOLYGON (((110.8198 -8...
3 2019-12-20 2020-04-01 <NA> 6.26 MULTIPOLYGON (((110.3591 -7...
4 2019-12-20 2020-04-01 <NA> 15.62 MULTIPOLYGON (((110.2554 -7...
5 2019-12-20 2020-04-01 <NA> 7.46 MULTIPOLYGON (((110.4531 -7...
Visualisasi Peta
Menampilkan peta persentase penduduk miskin berdasarkan Kabupaten/Kota di Provinsi D I Yogyakarta
Tanpa OpenStreetMap
p0 <- diy_p0 %>%ggplot() +geom_sf(aes(fill = Persentase)) +# membuat peta berdasarkan nilai kolom Persentase dan warna menyesuaikan nilai Persentase ggsflabel::geom_sf_label_repel(aes(label =str_wrap(ADM2_EN, width =1)), size=1.75) +# menambahkan label Kab/Kota dari kolom ADM2_EN, geom_sf_label_repel agar label tidak bertumpuk, str_wrap untuk memgatur agar teks tidak terlalu panjangscale_fill_gradientn(colors = RColorBrewer::brewer.pal(9, "YlOrBr")) +# mengatur variasi warna pada peta menggunakan palet warna YlOrBr dari RColorBrewerannotation_north_arrow(location ="tl",which_north ="true", # menambahkan panah arah utara pada peta. lokasi panah di pojok kiri atas (top-left)pad_x =unit(0.2, "cm"), pad_y =unit(0.2, "cm"), # mengatur jarak panah dari tepi plot dalam satuan sentimeterstyle = north_arrow_nautical, # memilih panah nautikalwidth =unit(1.5, "cm"), height =unit(1.5, "cm")) +# mengatur lebar dan tinggi panahtheme_bw() +# memilih tema black and whitetheme(axis.title =element_blank()) # menghilangkan label sumbu X dan Yp0
Warning in st_point_on_surface.sfc(data$geometry): st_point_on_surface may not
give correct results for longitude/latitude data
Peta pada OpenStreetMap
p1 <- diy_p0 %>%st_transform(3857) %>%# mengubah sistem koordinat data spasial diy_p0 menjadi EPSG:3857 (Web Mercator) untuk membuat peta menggunakan OpenStreetMapggplot()+annotation_map_tile(type ="osm", zoomin =0)+# menambahkan OpenStreetMap ke plot sehingga data spasial dapat dipetakan di atas peta dunia nyatageom_sf(aes(fill = Persentase))+# membuat peta dan mewarnai setiap Kab/Kota berdasarkan nilai Persentase ggsflabel::geom_sf_label_repel(aes(label=str_wrap(ADM2_EN, width=1)),size=1.75)+# menambahkan label Kab/Kota dari kolom ADM2_EN, geom_sf_label_repel agar label tidak bertumpuk, str_wrap untuk memgatur agar teks tidak terlalu panjangscale_fill_stepsn(colors = RColorBrewer::brewer.pal(9, "YlOrBr")) +# mengatur variasi warna pada peta menggunakan palet warna YlOrBr dari RColorBrewerannotation_north_arrow( # menambahkan panah arah pada petalocation ="tl", which_north ="true", # lokasi panah di pojok kiri atas (top-left), panah arah utarapad_x =unit(0.2, "cm"), pad_y =unit(0.2, "cm"), # mengatur jarak panah dari tepi plot dalam satuan sentimeterstyle = north_arrow_nautical, # memilih panah nautikalwidth =unit(1.5, "cm"), height =unit(1.5, "cm")) +# mengatur lebar dan tinggi panahtheme_bw()+# memilih tema black and whitetheme(axis.title =element_blank()) # menghilangkan label sumbu X dan Yp1
Zoom: 10
Peta Interaktif
diy_p0 %>% mapview::mapview( # menampilkan data spasial di peta interaktif menggunakan mapviewzcol ="Persentase", # menentukan warna pada peta berdasarkan nilai Persentaseat =seq(0, 18, 2), # mengatur rentang warna berdasarkan nilai Persentasecol.regions = RColorBrewer::brewer.pal(9, "YlOrBr") # mengatur variasi warna pada peta menggunakan palet warna YlOrBr dari RColorBrewer )
Warning: Found less unique colors (9) than unique zcol values (10)!
Interpolating color vector to match number of zcol values.