Eksplorasi Visualisasi Data Besar_Tugas Mandiri
Tugas Mandiri Eksplorasi dan Visualisasi Data Besar
No 1
Visualisasi gabungan Violin Plot dan Box Plot ini digunakan untuk menyatukan kelebihan dari kedua jenis grafik. Box plot sangat efektif menampilkan ringkasan statistik lima angka (minimum, \(Q_1\), median, \(Q_3\), dan maksimum) serta posisi outlier, tetapi menyembunyikan kontur atau bentuk distribusi data (misalnya apakah data punya satu atau dua puncak). Sementara itu, violin plot memperlihatkan kontur densitas probabilitas (Kernel Density Estimation) secara kontinu. Menggabungkan keduanya memberikan informasi statistik yang presisi sekaligus gambaran bentuk sebaran data dalam satu tampilan yang efisien.Pada visualisasi ini, penggabungan dilakukan dengan menempatkan box plot transparan di dalam area violin berorientasi horizontal. Hal ini mempermudah pembacaan variabel kontinu pada sumbu X dari kiri ke kanan. Agar visualisasi jauh lebih efektif, beberapa perbaikan berikut dapat diterapkan:
- Pembersihan Sumbu Y: Menghapus label sumbu Y seperti >all karena tidak memberikan konteks berarti jika data hanya terdiri dari satu kelompok.Penambahan
- Penanda Standar Medis: Menambahkan garis vertikal putus-putus pada angka \(2500\text{ gram}\) sebagai batas klinis Berat Badan Lahir Rendah (BBLR) untuk memberi konteks medis langsung bagi pembaca.
- Titik Data Asli (Jittered Points): Menampilkan sebaran titik data asli secara halus di atas grafik untuk memperlihatkan ukuran sampel sebenarnya dan mencegah misinterpretasi akibat efek penghalusan kurva (smoothing artifact).
Dari visualisasi tersebut, informasi utama yang dapat disimpulkan meliputi: - Pemusatan Data: Nilai median berat badan lahir bayi berada di sekitar \(3000\text{ gram}\) (\(3\text{ kg}\)). - Rentang Antarkuartil (\(IQR\)): Sebanyak \(50\%\) data berada di rentang \(2400\text{ gram}\) (\(Q_1\)) hingga \(3500\text{ gram}\) (\(Q_3\)). - Bentuk Distribusi: Distribusi bersifat unimodal (satu puncak utama) dengan ekor yang memanjang ke kiri (left-skewed tail). - Pencilan (Outliers): Terdapat titik pencilan ekstrem di kisaran \(700\text{ gram} - 800\text{ gram}\), yang mengindikasikan adanya kasus kelahiran prematur ekstrem atau kondisi medis khusus.
Berikut kode R simulasi sederhana untuk membuat ulang dan memperbarui visualisasi tersebut:
## Warning: package 'ggplot2' was built under R version 4.5.3
# Simulasi data berat lahir
set.seed(123)
data_simulasi <- data.frame(
birth_weight = c(rnorm(980, mean = 3000, sd = 500), runif(20, min = 700, max = 1500))
)
# Plot hibrida Violin + Boxplot dengan perbaikan
ggplot(data_simulasi, aes(x = birth_weight, y = "")) +
geom_violin(fill = "#b2d8d8", color = "#004c6d", alpha = 0.6, trim = FALSE) +
geom_boxplot(width = 0.15, fill = "white", color = "black", outlier.shape = NA) +
geom_jitter(height = 0.05, alpha = 0.15, color = "#004c6d", size = 1) +
geom_vline(xintercept = 2500, linetype = "dashed", color = "red", linewidth = 0.8) +
annotate("text", x = 2500, y = 1.3, label = "Batas BBLR (2500g)", color = "red", hjust = 1.1) +
labs(
title = "Distribusi Berat Badan Lahir Bayi",
x = "Berat Lahir (gram)",
y = NULL
) +
theme_minimal() +
theme(
axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
panel.grid.minor = element_blank()
)No 2
Visualisasi ini adalah Ridgeline Plot (atau Joyplot). Visualisasi ini perlu digunakan karena sangat efektif untuk membandingkan bentuk distribusi dari variabel kontinu (Indeks Pembangunan Manusia / IPM) di banyak kategori sekaligus (6 benua). Jika menggunakan kurva densitas biasa dalam satu sumbu yang sama, grafik akan menjadi sangat ramai dan tumpang tindih (cluttered). Sebaliknya, jika hanya menggunakan box plot, kita akan kehilangan detail penting seperti distribusi bimodal (dua puncak) atau multimodal pada benua tertentu. Ridgeline plot menghemat ruang secara vertikal dengan sedikit menumpuk kurva densitas, sehingga pola sebaran tiap benua dapat dibandingkan secara intuitif.
Meskipun grafik saat ini sudah cukup informatif, beberapa perbaikan dapat membuat visualisasi ini jauh lebih efektif: - Pengurutan Kategori Berdasarkan Median: Saat ini benua disusun secara tidak berurutan (alfabetis/acak). Mengurutkan benua dari nilai median IPM terendah ke tertinggi (misalnya dari Afrika di bawah hingga Eropa di atas) akan langsung memperlihatkan hierarki pembangunan antar-benua secara instan. - Pembatasan Rentang Sumbu X (Trimming Density): Nilai IPM secara teoretis berada pada rentang 0 hingga 1. Pada grafik, kurva meluas hingga melebihi 1.1 akibat efek penghalusan (kernel density smoothing artifact). Membatasi atau memotong kurva pada batas maksimum 1.0 membuat visualisasi lebih akurat secara realistis. - Penambahan Garis Median/Kuartil: Menambahkan garis vertikal penanda median atau kuartil di dalam setiap kurva densitas membantu pembaca mengetahui nilai persis pemusatan data tanpa harus menebak-nebak puncak kurva. - Merapikan Label dan Posisi Sumbu: Posisi teks label benua pada sumbu Y dan garis basisnya dapat dirapikan dengan menyesuaikan tingkat transparansi (alpha) kurva agar garis basis tidak tertutup warna kurva di bawahnya.
Berdasarkan visualisasi tersebut, informasi utama yang dapat disimpulkan meliputi: - Afrika: Memiliki tingkat IPM terendah secara umum, dengan puncak distribusi terpusat di kisaran \(0.5 - 0.55\), menunjukkan mayoritas negaranya berada dalam kategori pembangunan rendah hingga menengah. - Eropa: Memiliki IPM tertinggi dan paling konsisten, terakumulasi di kisaran \(0.85 - 0.90\) dengan sebaran yang relatif sempit (ketimpangan antar-negara rendah). - Asia: Memiliki sebaran paling lebar (rentang \(0.4\) hingga \(0.9+\)), mencerminkan ketimpangan pembangunan manusia yang sangat tinggi antar-negara di kawasan Asia. - Oseania: Menunjukkan pola multimodal (memiliki lebih dari satu puncak), yang mengindikasikan adanya jurang pemisah antara negara sangat maju (seperti Australia dan Selandia Baru) dengan negara kepulauan berkembang. - Amerika Utara dan Amerika Selatan: Amerika Utara mendominasi pada kategori IPM tinggi (\(0.75 - 0.90\)), sedangkan Amerika Selatan terpusat di kategori menengah-tinggi (\(0.70 - 0.75\)).
Berikut adalah contoh kode R simulasi menggunakan paket ggplot2 dan ggridges untuk mereplikasi dan menerapkan perbaikan pada grafik tersebut:
## Warning: package 'ggridges' was built under R version 4.5.3
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# 1. Simulasi Data IPM per Benua
set.seed(42)
n <- 200
data_ipm <- bind_rows(
data.frame(Benua = "Africa", IPM = c(rnorm(n*0.8, 0.52, 0.08), rnorm(n*0.2, 0.70, 0.05))),
data.frame(Benua = "Asia", IPM = runif(n, 0.42, 0.92)),
data.frame(Benua = "Europe", IPM = rnorm(n, 0.88, 0.05)),
data.frame(Benua = "North America", IPM = rnorm(n, 0.78, 0.08)),
data.frame(Benua = "Oceania", IPM = c(rnorm(n*0.6, 0.62, 0.06), rnorm(n*0.4, 0.92, 0.03))),
data.frame(Benua = "South America", IPM = rnorm(n, 0.72, 0.06))
) %>%
mutate(IPM = pmin(pmax(IPM, 0), 1)) # Batasi nilai IPM pada rentang 0 - 1
# 2. Mengurutkan Benua berdasarkan Median IPM
data_ipm <- data_ipm %>%
mutate(Benua = reorder(Benua, IPM, FUN = median))
# 3. Plot Ridgeline dengan Perbaikan
ggplot(data_ipm, aes(x = IPM, y = Benua, fill = Benua)) +
stat_density_ridges(
quantile_lines = TRUE,
quantiles = 2, # Menampilkan garis median
scale = 1.3, # Mengatur tingkat overlap kurva
alpha = 0.7,
color = "orange",
from = 0.3, to = 1.0 # Mencegah ekor kurva melebihi 1.0
) +
scale_x_continuous(limits = c(0.3, 1.0), breaks = seq(0.3, 1.0, by = 0.1)) +
scale_fill_viridis_d(option = "magma", guide = "none") +
labs(
title = "Distribusi Indeks Pembangunan Manusia (IPM) berdasarkan Benua",
subtitle = "Garis orange vertikal menunjukkan nilai median tiap benua",
x = "Indeks Pembangunan Manusia (IPM)",
y = "Benua"
) +
theme_minimal() +
theme(
plot.title = element_text(face = "bold", size = 14),
axis.text = element_text(color = "black"),
panel.grid.minor = element_blank()
)## Picking joint bandwidth of 0.0314
## Warning: Removed 1 row containing non-finite outside the scale range
## (`stat_density_ridges()`).
No 3
Visualisasi ini adalah Bar Chart dengan Error Bar (sering digunakan untuk menampilkan estimasi poin beserta interval kepercayaan / confidence interval). Visualisasi ini perlu digunakan ketika kita ingin membandingkan nilai rata-rata atau proporsi antar-kategori (dalam hal ini, tahun 2012 hingga 2015) sekaligus memperlihatkan tingkat ketidakpastian atau variabilitas data (uncertainty). Tanpa error bar, pembaca bisa salah menyimpulkan bahwa perbedaan tipis antar-tahun adalah perubahan yang pasti, padahal ada rentang ketidakpastian statistik di dalamnya.
Meskipun visualisasi ini sudah menampilkan estimasi dan rentang error, bentuk diagram batang ini (dynamite plot) kurang ideal untuk data deret waktu (time series). Beberapa perbaikan yang dapat membuat visualisasi lebih efektif meliputi:
- Mengubah Diagram Batang Menjadi Line Plot + Point (Point Range Plot): Karena sumbu X menyatakan urutan waktu (tahun), grafik garis atau titik jauh lebih intuitif untuk menunjukkan tren temporal. Diagram batang tebal menciptakan data-ink ratio yang buruk (banyak warna visual terbuang hanya untuk mengisi area dari angka 0 hingga 35 yang tidak membawa informasi penting).
- Menyesuaikan Skala Sumbu Y (Zooming In): Sumbu Y pada gambar dimulai
dari \(0\%\) hingga \(50\%\). Dengan mengganti ke grafik
titik/garis, rentang sumbu Y dapat difokuskan (misalnya dari \(30\%\) hingga \(50\%\)) sehingga perbedaan antar-tahun dan
rentang ketidakpastian dapat terlihat lebih rinci tanpa distorsi
visual.
- Menambahkan Penanda Nilai Presisi (Label Angka): Menampilkan label persentase tepat di dekat titik rata-rata memudahkan pembaca mengetahui angka pasti tanpa harus menarik garis bayangan ke sumbu Y.
Berdasarkan visualisasi tersebut, informasi utama yang dapat disimpulkan meliputi: - Tren Penurunan Tipis: Terdapat kecenderungan penurunan perlahan pada persentase pemilik lahan kecil, yaitu dari sekitar \(41.8\%\) pada tahun 2012 menjadi sekitar \(39.7\%\) pada tahun 2015. - Rentang Ketidakpastian: Setiap tahun memiliki interval kepercayaan dengan rentang sekitar \(\pm 3\%\), di mana pada tahun 2012 rentangnya berkisar antara \(38.5\%\) hingga \(45\%\). - Stabilitas Secara Statistik (Overlapping Error Bars): Rentang error bar dari tahun 2012 hingga 2015 saling tumpang tindih (overlap) secara signifikan. Hal ini menandakan bahwa penurunan persentase pemilik lahan kecil selama periode tersebut kemungkinan tidak signifikan secara statistik, atau secara umum kondisi kepemilikan lahan kecil cenderung stabil/stagnan di kisaran \(40\%\).
Berikut adalah kode R simulasi untuk mereplikasi dan membuat versi perbaikan grafik tersebut menggunakan ggplot2:
library(ggplot2)
# 1. Simulasi Data Persentase Pemilik Lahan Kecil (2012-2015)
data_lahan <- data.frame(
tahun = c("2022", "2023", "2024", "2025"),
persentase = c(41.8, 41.0, 40.3, 39.7),
lower = c(38.5, 37.5, 37.0, 36.0),
upper = c(45.0, 44.5, 43.8, 43.5)
)
# Konversi tahun ke numerik untuk plotting garis tren kontinu
data_lahan$tahun_num <- as.numeric(data_lahan$tahun)
# 2. Grafik Perbaikan: Line & Point-Range Plot
ggplot(data_lahan, aes(x = tahun_num, y = persentase)) +
# Garis tren penghubung antar tahun
geom_line(color = "#006666", linewidth = 1, linetype = "dashed") +
# Error bar / Interval Kepercayaan
geom_errorbar(aes(ymin = lower, ymax = upper), width = 0.15, color = "#006666", linewidth = 0.8) +
# Titik rata-rata/estimasi
geom_point(size = 3.5, color = "#006666") +
# Label angka persentase
geom_text(aes(label = paste0(persentase, "%")), vjust = -1.8, color = "#004c6d", fontface = "bold") +
# Pengaturan Sumbu & Skala
scale_x_continuous(breaks = data_lahan$tahun_num, labels = data_lahan$tahun) +
scale_y_continuous(limits = c(30, 50), breaks = seq(30, 50, by = 5)) +
labs(
title = "Tren Persentase Pemilik Lahan Kecil (2022–2025)",
subtitle = "Titik menunjukkan estimasi rata-rata, garis vertikal menunjukkan rentang interval kepercayaan",
x = "Tahun",
y = "Persentase Pemilik Lahan Kecil (%)"
) +
theme_minimal() +
theme(
plot.title = element_text(face = "bold", size = 13),
panel.grid.minor = element_blank(),
axis.text = element_text(color = "black", size = 10)
)No 4
Visualisasi pada Gambar 9.9 adalah Directed Network Graph (Graf Jaringan Berarah). Visualisasi ini perlu digunakan karena data perdagangan internasional merupakan data relasional berarah (ekspor dan impor) antar banyak entitas sekaligus. Memakai tabel atau matriks biasa akan menyulitkan pembaca untuk melihat pola aliran, struktur hubungan bilateral, dan pusat (hub) perdagangan. Network graph merangkum kompleksitas alur bolak-balik tersebut menjadi satu tampilan visual yang terstruktur.
Cara Melihat Volume pada Visualisasi Gambar 9.9: - Ketebalan Garis (Edge Width): Volume atau nilai perdagangan antar dua negara ditunjukkan oleh ketebalan garis panah. Garis merah yang menghubungkan Indonesia dengan Singapura, Thailand, dan Malaysia memiliki ukuran lebih tebal dibandingkan garis biru antar-negara lainnya, yang menandakan volume perdagangan pada jalur tersebut jauh lebih besar. - Ukuran dan Warna Simpul (Node Size & Color): Ukuran lingkaran merepresentasikan akumulasi total volume perdagangan atau kapasitas negara tersebut dalam jaringan. Negara dengan aktivitas perdagangan rendah (seperti Kamboja dan Vietnam) digambarkan dengan lingkaran abu-abu yang lebih pudar/kecil untuk membedakan skala kontribusinya dibanding negara hub utama. - Arah Panah (Directional Flow): Garis melengkung terpisah dengan mata panah menunjukkan arah aliran barang/jasa (apakah ekspor dari negara A ke B, atau sebaliknya).
Apa yang Diubah dan Bagaimana Perbaikan Membuat Visualisasi Lebih Efektif:
Pembedaan Warna Jalur Fokus: Visualisasi ini memisahkan garis merah (jalur perdagangan yang melibatkan Indonesia) dan garis biru (perdagangan antar-negara ASEAN lainnya). Hal ini memfokuskan perhatian pembaca pada posisi Indonesia tanpa menghilangkan konteks regional.
Garis Melengkung Berarah (Curved Edges): Penggunaan garis lengkung mencegah garis ekspor dan impor antar dua negara yang sama saling menutupi (overlap).
Usulan Perbaikan Tambahan: - Menambahkan Legenda Ukuran/Volume: Menyediakan legenda nilai nominal (misalnya: tebal garis = > 5 Miliar USD) agar ketebalan tidak bersifat relatif semata. - Mengurangi Penumpukan Label (Label Overlap): Menyesuaikan tata letak (layout algorithm) agar nama negara seperti “Indonesia” dan “Singapore” tidak tertimpa oleh garis panah. - Label Angka Nilai Perdagangan: Menampilkan angka atau persentase volume pada garis-garis utama untuk memberikan presisi kuantitatif.
Makna dan Informasi Utama yang Ditampilkan: - Indonesia dan Singapura sebagai Hub Utama: Indonesia (simpul oranye) dan Singapura (simpul biru tengah) menjadi simpul dengan tingkat konektivitas dan volume terbesar dalam jaringan perdagangan ini. - Kemitraan Kuat Dua Arah: Indonesia memiliki volume perdagangan bilateral yang besar dan intensif secara dua arah dengan Singapura, Malaysia, Thailand, dan Filipina. - Perdagangan Asimetris Regional: Terdapat ketimpangan jaringan di mana Kamboja dan Vietnam masih memiliki jalur perdagangan terbatas atau terisolasi dibandingkan kelompok negara inti ASEAN lainnya dalam visualisasi ini.
Berikut adalah kode R simulasi untuk mereplikasi dan membangun jaringan perdagangan berarah serupa menggunakan pustaka tidygraph dan ggraph:
## Warning: package 'tidyverse' was built under R version 4.5.2
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.1 ✔ stringr 1.5.2
## ✔ lubridate 1.9.4 ✔ tibble 3.3.0
## ✔ purrr 1.1.0 ✔ tidyr 1.3.1
## ✔ readr 2.1.5
## ── 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
## Warning: package 'tidygraph' was built under R version 4.5.3
##
## Attaching package: 'tidygraph'
##
## The following object is masked from 'package:stats':
##
## filter
## Warning: package 'ggraph' was built under R version 4.5.3
# 1. Data Negara (Nodes) dengan Koordinat & Posisi Teks yang Disesuaikan
nodes <- data.frame(
name = c("Indonesia", "Singapore", "Thailand", "Malaysia", "Philippines", "Vietnam", "Cambodia"),
x = c(0, 0, -1.5, 1.6, 1.6, 0, -3.0),
y = c(1.6, 0, 0.3, -0.7, 1.2, -1.0, 0.5),
vjust_val = c(-1.6, 2.3, 2.3, 2.3, 2.3, -1.6, 2.3) # Teks Viet Nam dipindah ke atas simpul
)
# 2. Data Jalur Perdagangan (Edges)
edges <- data.frame(
from = c("Indonesia", "Singapore", "Thailand", "Indonesia", "Malaysia", "Indonesia", "Thailand", "Thailand", "Philippines"),
to = c("Singapore", "Indonesia", "Indonesia", "Malaysia", "Indonesia", "Philippines", "Singapore", "Cambodia", "Indonesia"),
volume = c(150, 130, 95, 110, 100, 85, 75, 20, 35)
)
# 3. Struktur Graf Berarah
graph_data <- tbl_graph(nodes = nodes, edges = edges, directed = TRUE) %>%
mutate(
is_indonesia = (name == "Indonesia"),
is_faded = name %in% c("Vietnam", "Cambodia")
) %>%
activate(edges) %>%
mutate(
is_indo_trade = (.N()$name[from] == "Indonesia" | .N()$name[to] == "Indonesia")
)
# 4. Plot Jaringan dengan Legenda Diberi Jarak ke Bawah
ggraph(graph_data, layout = "manual", x = x, y = y) +
# Garis panah melengkung berarah
geom_edge_arc(
aes(width = volume, color = is_indo_trade),
arrow = arrow(length = unit(3, "mm"), type = "closed"),
end_cap = circle(7, "mm"),
start_cap = circle(7, "mm"),
strength = 0.22,
alpha = 0.85
) +
# Simpul Lingkaran Negara
geom_node_point(aes(color = is_indonesia, shape = is_faded), size = 11) +
# Teks Nama Negara
geom_node_text(aes(label = name, vjust = vjust_val), fontface = "bold", size = 3.8, color = "black") +
# Skala & Warna
scale_edge_width(range = c(0.7, 2.3), name = "Volume Perdagangan") +
scale_edge_color_manual(values = c("FALSE" = "#2c7fb8", "TRUE" = "#d95f02"), guide = "none") +
scale_color_manual(values = c("FALSE" = "#02818a", "TRUE" = "#ff7f00"), guide = "none") +
scale_shape_manual(values = c("FALSE" = 19, "TRUE" = 1), guide = "none") +
# Mencegah elemen terpotong
coord_cartesian(clip = "off") +
labs(
title = "Visualisasi Perdagangan Antar Negara ASEAN",
subtitle = "Ketebalan garis menunjukkan volume perdagangan, warna oranye menyoroti jalur Indonesia"
) +
theme_void() +
theme(
plot.title = element_text(face = "bold", size = 14, hjust = 0.5, margin = margin(b = 6)),
plot.subtitle = element_text(size = 10, hjust = 0.5, color = "gray30", margin = margin(b = 15)),
legend.position = "bottom",
legend.title = element_text(size = 9, face = "bold"),
legend.box.margin = margin(t = 35, unit = "pt"), # Menurunkan posisi legenda ke bawah
plot.margin = margin(25, 25, 35, 25, "pt")
)No 5
Visualisasi pada Gambar 10.6 adalah Peta Tematik / Kloroplet (Choropleth Map). Visualisasi ini perlu digunakan karena data tingkat kemiskinan berbasis wilayah (provinsi) memiliki dimensi geospasial. Membandingkan 38 provinsi menggunakan tabel angka atau bar chart biasa akan menyulitkan pembaca untuk mengidentifikasi pola geografis, klastering wilayah, dan pemetaan kesenjangan antar-daerah secara intuitif.
Mengapa Visualisasi Tersebut Perlu Digunakan? Pemetaan Pola Spasial: Kloroplet secara otomatis mengelompokkan wilayah berdasarkan kedekatan geografis, memudahkan identifikasi batas ketimpangan (misalnya perbandingan wilayah Barat vs Timur Indonesia). Efisiensi Informasi: Mengodekan nilai numerik (persentase kemiskinan) ke dalam gradasi warna (color gradient) pada area geografis nyata.
Apa yang Diubah dan Bagaimana Perbaikan Membuat Visualisasi Lebih Efektif? Visualisasi ini menggunakan warna biru yang semakin gelap untuk mengindikasikan persentase kemiskinan yang semakin tinggi. Beberapa perbaikan yang dapat meningkatkan efektivitasnya meliputi:
Meningkatkan Kontras Warna (Palet Warna): Penggunaan warna biru yang sangat muda di daerah Indonesia Barat membuat batas antar-provinsi terlihat agak kabur. Menggunakan palet yang lebih kontras (seperti Viridis atau YlOrRd) akan memperjelas perbedaan antardaerah yang nilainya berdekatan.
Menambahkan Label Highlight: Memberikan label teks nilai persentase pada provinsi dengan nilai ekstrem (tertinggi dan terendah) memudahkan pembaca mendapatkan angka pasti tanpa harus selalu mencocokkan warna ke legenda.
Pengelompokan Kelas (Binned Palette): Selain skala kontinu, mengelompokkan data ke dalam kategori kualitatif (misal: Sangat Rendah <8%, Sedang 8-15%, Tinggi >15%) dapat mempercepat pemahaman pembaca.
Makna dan Informasi Utama yang Ditampilkan: - Ketimpangan Wilayah Barat dan Timur: Terlihat kontras yang jelas di mana wilayah Indonesia Bagian Barat (Sumatra, Jawa, Kalimantan) didominasi warna muda dengan persentase kemiskinan relatif rendah (berada di bawah \(10\%\)). - Tingkat Kemiskinan Tertinggi di Indonesia Timur: Wilayah Papua dan Papua Barat diwarnai biru paling pekat, menandakan tingkat kemiskinan tertinggi di Indonesia yang berada di kisaran \(20\% - 25\%+\) pada tahun 2020. - Kondisi Menengah: Wilayah Nusa Tenggara, Maluku, dan sebagian Sulawesi berada pada warna biru sedang, mencerminkan persentase kemiskinan di kisaran \(10\% - 18\%\).
## Warning: package 'sf' was built under R version 4.5.2
## Linking to GEOS 3.13.1, GDAL 3.11.4, PROJ 9.7.0; sf_use_s2() is TRUE
## Warning: package 'rnaturalearth' was built under R version 4.5.3
library(dplyr)
# 1. Mengambil data batas wilayah spasial provinsi di Indonesia
indonesia_sf <- ne_states(country = "indonesia", returnclass = "sf")
# 2. Membuat data simulasi tingkat kemiskinan per provinsi (sesuai pola tahun 2020)
set.seed(2020)
indonesia_simulasi <- indonesia_sf %>%
mutate(
# Ekstrak bujur (longitude) untuk mensimulasikan kecenderungan nilai di wilayah Timur
longitude = st_coordinates(st_centroid(geometry))[,1],
persentase_kemiskinan = case_when(
name %in% c("Papua", "Papua Barat") ~ runif(n(), 21, 26),
name %in% c("Nusa Tenggara Timur", "Maluku", "Gorontalo") ~ runif(n(), 14, 18),
longitude > 120 ~ runif(n(), 10, 15),
TRUE ~ runif(n(), 4, 11)
)
)
# 3. Visualisasi Peta Kloroplet
ggplot(data = indonesia_simulasi) +
geom_sf(aes(fill = persentase_kemiskinan), color = "gray40", linewidth = 0.2) +
scale_fill_gradient(
low = "#f7fbff",
high = "#08519c",
name = "Persentase Kemiskinan",
limits = c(5, 27),
breaks = seq(5, 25, by = 5)
) +
labs(
title = "Peta Tematik Tingkat Kemiskinan Level Provinsi di Indonesia (2020)",
subtitle = "Warna yang semakin gelap mengindikasikan tingkat kemiskinan yang semakin tinggi"
) +
theme_minimal() +
theme(
plot.title = element_text(face = "bold", size = 13, hjust = 0.5),
plot.subtitle = element_text(size = 10, hjust = 0.5, color = "gray30", margin = margin(b = 15)),
legend.position = "bottom",
legend.key.width = unit(2.2, "cm"),
legend.key.height = unit(0.3, "cm"),
legend.title = element_text(size = 9, vjust = 0.85),
axis.text = element_blank(),
axis.ticks = element_blank(),
panel.grid = element_blank(),
plot.margin = margin(15, 15, 15, 15, "pt")
)