Catatan: seluruh data pada dokumen ini adalah data dummy (simulasi) yang dibuat agar bentuk grafiknya menyerupai grafik contoh. Nilainya tidak menggambarkan kondisi sebenarnya, sehingga interpretasi di bawah dibuat berdasarkan pola data dummy tersebut dan cara membaca grafiknya.
install.packages(c("knitr", "rmarkdown", "tidyverse", "ggridges", "igraph",
"ggraph", "patchwork", "sf", "rnaturalearth"))
# data batas provinsi resolusi tinggi untuk peta
install.packages("rnaturalearthhires",
repos = "https://ropensci.r-universe.dev", type = "source")
library(tidyverse)
library(ggridges)
library(igraph)
library(ggraph)
library(patchwork)
library(sf)
library(rnaturalearth)
set.seed(123)
| Aspek | Keterangan |
|---|---|
| Nama visualisasi | Violin plot yang digabung dengan boxplot |
| Fungsi | Menampilkan sebaran (distribusi) satu variabel numerik. Violin plot memperlihatkan bentuk sebaran, sedangkan boxplot meringkas median, kuartil, dan pencilan. |
| Isi visualisasi | Sebaran berat badan lahir bayi (dalam gram) dari seluruh data. Sumbu x adalah berat lahir, lebar “biola” menunjukkan banyaknya data pada nilai tersebut. |
bw <- tibble(
berat = c(rnorm(1800, 3100, 450), # kelompok normal
rnorm(900, 2600, 500), # kelompok lebih ringan
rnorm(300, 3900, 350)) # kelompok lebih berat
) %>%
mutate(berat = pmin(pmax(berat, 700), 5000),
grup = "all")
ggplot(bw, aes(x = berat, y = grup)) +
geom_violin(fill = "#B3D9CF", colour = "grey30", orientation = "y") +
geom_boxplot(width = 0.12, fill = "white", outlier.size = 1) +
labs(x = "birth weight (grams)", y = "y") +
scale_x_continuous(breaks = seq(1000, 5000, 1000)) +
theme_light() +
theme(axis.text.y = element_text(size = 8))
Interpretasi:
| Aspek | Keterangan |
|---|---|
| Nama visualisasi | Ridgeline plot (joyplot), yaitu kumpulan kurva densitas yang disusun bertumpuk |
| Fungsi | Membandingkan sebaran suatu variabel numerik antar banyak kelompok sekaligus, tanpa grafik saling menutupi seperti kalau densitas ditumpuk di satu sumbu. |
| Isi visualisasi | Sebaran Indeks Pembangunan Manusia (IPM) negara-negara pada tiap benua. Setiap warna adalah satu benua. |
benua_lv <- c("Africa", "Asia", "Europe",
"North America", "Oceania", "South America")
hdi <- bind_rows(
tibble(Benua = "Africa",
IPM = c(rnorm(50, 0.52, 0.07), rnorm(15, 0.71, 0.05))),
tibble(Benua = "Asia",
IPM = c(rnorm(30, 0.72, 0.07), rnorm(15, 0.62, 0.07),
rnorm(12, 0.92, 0.04))),
tibble(Benua = "Europe",
IPM = rnorm(45, 0.89, 0.05)),
tibble(Benua = "North America",
IPM = c(rnorm(25, 0.77, 0.06), rnorm(5, 0.51, 0.02))),
tibble(Benua = "Oceania",
IPM = c(rnorm(8, 0.60, 0.05), rnorm(6, 0.72, 0.03),
rnorm(2, 0.94, 0.02))),
tibble(Benua = "South America",
IPM = rnorm(12, 0.75, 0.05))
) %>%
mutate(Benua = factor(Benua, levels = benua_lv))
ggplot(hdi, aes(x = IPM, y = Benua, fill = Benua)) +
geom_density_ridges(scale = 1.3, rel_min_height = 0.01) +
scale_x_continuous(breaks = seq(0.3, 1.1, 0.2)) +
labs(x = "Indeks Pembangunan Manusia", y = "Benua") +
theme_minimal() +
theme(legend.position = "none",
axis.title = element_text(size = 12))
Interpretasi:
| Aspek | Keterangan |
|---|---|
| Nama visualisasi | Network graph berarah (directed network graph) |
| Fungsi | Menampilkan hubungan antar entitas beserta arahnya. Di sini dipakai untuk melihat siapa mengirim ke siapa dalam perdagangan antar negara. |
| Isi visualisasi | Setiap lingkaran (node) adalah negara ASEAN, setiap garis berpanah (edge) adalah aliran perdagangan dari negara asal ke negara tujuan. |
Cara melihat volume: arah perdagangan ditunjukkan oleh panah, sedangkan volume perdagangan ditunjukkan oleh ketebalan garis. Semakin tebal garis, semakin besar volume perdagangannya. Garis merah menandai perdagangan yang terkait dengan Indonesia, garis biru adalah perdagangan antar negara lain.
# posisi node (disesuaikan dengan gambar contoh)
node <- tibble(
name = c("Indonesia", "Philippines", "Singapore", "Thailand",
"Malaysia", "Vietnam", "Cambodia"),
x = c(4.45, 6.10, 4.55, 2.70, 6.40, 4.55, 0.85),
y = -c(0.55, 0.40, 1.85, 2.50, 2.50, 2.80, 2.50),
grup = c("Indonesia", "Aktif", "Aktif", "Aktif", "Aktif",
"Pasif", "Pasif")
)
# data dummy: volume perdagangan (miliar USD)
edge <- tribble(
~from, ~to, ~volume,
"Indonesia", "Philippines", 8,
"Thailand", "Indonesia", 15,
"Malaysia", "Indonesia", 20,
"Singapore", "Indonesia", 25,
"Indonesia", "Singapore", 30,
"Singapore", "Malaysia", 35,
"Malaysia", "Singapore", 32,
"Singapore", "Thailand", 18,
"Thailand", "Singapore", 14,
"Thailand", "Malaysia", 22,
"Malaysia", "Thailand", 19,
"Singapore", "Philippines", 6,
"Thailand", "Cambodia", 4,
"Thailand", "Vietnam", 9,
"Vietnam", "Malaysia", 10
) %>%
mutate(jenis = ifelse(from == "Indonesia" | to == "Indonesia",
"Terkait Indonesia", "Lainnya"))
g <- graph_from_data_frame(edge, vertices = node, directed = TRUE)
ggraph(g, layout = "manual", x = node$x, y = node$y) +
geom_edge_arc(aes(edge_width = volume, edge_colour = jenis),
strength = 0.25,
arrow = arrow(length = unit(3, "mm"), type = "closed"),
end_cap = circle(7, "mm"), alpha = 0.85) +
geom_node_point(aes(colour = grup), size = 13) +
geom_node_text(aes(label = name), vjust = 3.2, size = 3.3) +
scale_edge_width(range = c(0.3, 2.5),
name = "Volume perdagangan\n(miliar USD)") +
scale_edge_colour_manual(values = c("Terkait Indonesia" = "#C8274A",
"Lainnya" = "#2A9DC0"),
name = "Jenis") +
scale_colour_manual(values = c("Indonesia" = "#FF7F00",
"Aktif" = "#0B7EA6",
"Pasif" = "grey88"),
guide = "none") +
labs(caption = "Gambar 9.9. Visualisasi perdagangan antar negara ASEAN (data dummy)") +
theme_void() +
theme(plot.caption = element_text(hjust = 0.5, size = 11))
Interpretasi:
| Aspek | Keterangan |
|---|---|
| Nama visualisasi | Diagram batang (bar chart) dan diagram batang dengan error bar |
| Fungsi | Diagram batang membandingkan nilai antar kategori (di sini antar tahun). Error bar menambahkan informasi ketidakpastian dari nilai tersebut. |
| Isi visualisasi | Persentase petani dengan lahan kecil di Kamboja pada tahun 2012 sampai 2015. Panel kiri tanpa error bar, panel kanan dengan error bar (selang kepercayaan 95%). |
Data mentah disimulasikan untuk tiap tahun, lalu dihitung rata-rata dan selang kepercayaan 95% (rata-rata ± 1,96 × standard error) yang dipakai sebagai error bar.
raw <- tibble(
tahun = rep(2012:2015, each = 100),
nilai = rnorm(400, mean = rep(c(41.8, 40.9, 40.3, 39.7), each = 100), sd = 16)
)
ringkas <- raw %>%
group_by(tahun) %>%
summarise(rata = mean(nilai),
se = sd(nilai) / sqrt(n()),
bawah = rata - 1.96 * se,
atas = rata + 1.96 * se)
dasar <- ggplot(ringkas, aes(x = factor(tahun), y = rata)) +
geom_col(fill = "#B3D9CF", alpha = 0.7, width = 0.6) +
scale_y_continuous(limits = c(0, 50)) +
labs(x = "tahun", y = "persentase pemilik lahan kecil") +
theme_light(base_size = 9)
# Panel kiri: tanpa error bar
p_kiri <- dasar
# Panel kanan: dengan error bar
p_kanan <- dasar +
geom_errorbar(aes(ymin = bawah, ymax = atas),
width = 0.15, colour = "#4DAF92", linewidth = 0.9) +
geom_point(colour = "#4DAF92", size = 1.5)
p_kiri + p_kanan +
plot_annotation(
caption = "Gambar 8.2. Diagram batang (kiri) dan diagram batang dengan tambahan error bar (kanan)"
)
Interpretasi:
| Aspek | Keterangan |
|---|---|
| Nama visualisasi | Peta tematik / choropleth map |
| Fungsi | Menampilkan sebaran suatu nilai berdasarkan wilayah geografis, dengan warna sebagai penanda besar kecilnya nilai. Cocok untuk melihat pola spasial. |
| Isi visualisasi | Persentase penduduk miskin pada tiap provinsi di Indonesia. Makin gelap/merah warna provinsi, makin tinggi tingkat kemiskinannya. |
Peta diambil dari package rnaturalearth. Nilai
kemiskinan adalah data dummy: provinsi di Indonesia timur dibuat lebih
tinggi. Skala warna dibuat dari kuning pucat, oranye, merah,
sampai merah tua supaya perbedaan antar provinsi terlihat
jelas.
prov <- ne_states(country = "Indonesia", returnclass = "sf")
# nilai dummy (5% sampai 27%); Papua, Maluku, NTT, dll dibuat lebih tinggi
tinggi <- "Papua|Maluku|Nusa Tenggara Timur|Gorontalo|Aceh|Bengkulu|Sulawesi Tengah"
prov <- prov %>%
mutate(kemiskinan = ifelse(grepl(tinggi, name),
runif(n(), 13, 20),
runif(n(), 5, 12)),
kemiskinan = ifelse(grepl("^Papua$", name), 26.5, kemiskinan))
ggplot(prov) +
geom_sf(aes(fill = kemiskinan), colour = "grey25", linewidth = 0.25) +
scale_fill_gradientn(
colours = c("#FFFFCC", "#FED976", "#FD8D3C", "#E31A1C", "#800026"),
name = "Persentase Kemiskinan",
limits = c(5, 27)
) +
coord_sf(xlim = c(94, 142), ylim = c(-11.5, 6.5)) +
theme_void() +
theme(legend.position = "bottom",
legend.key.width = unit(2.2, "cm"),
legend.title = element_text(size = 9, vjust = 0.8),
plot.caption = element_text(hjust = 0.5, size = 11)) +
labs(caption = "Gambar 10.6. Peta tematik tingkat kemiskinan level provinsi di Indonesia (data dummy)")
Interpretasi:
Kelima visualisasi memiliki tujuan yang berbeda: violin plot untuk melihat sebaran satu variabel, ridgeline plot untuk membandingkan sebaran antar kelompok, network graph untuk melihat hubungan dan arah antar entitas, diagram batang dengan error bar untuk membandingkan nilai sekaligus ketidakpastiannya, dan peta tematik untuk melihat pola menurut wilayah.