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.

Persiapan Package

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)

1. Violin Plot dan Boxplot Berat Badan Lahir

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:

  • Bagian paling lebar pada violin berada di sekitar 3.000 gram, artinya sebagian besar bayi memiliki berat lahir di sekitar nilai tersebut.
  • Garis tengah di dalam kotak adalah median, sedangkan kotak mewakili rentang kuartil 1 sampai kuartil 3 (50% data berada di dalam kotak).
  • Bagian violin yang menipis ke kiri (di bawah sekitar 2.500 gram) menunjukkan adanya bayi dengan berat lahir rendah dalam jumlah kecil. Ekor ke kanan menunjukkan bayi dengan berat lahir tinggi, juga dalam jumlah kecil.
  • Titik di ujung kiri adalah pencilan (nilai yang sangat jauh dari kebanyakan data).
  • Bentuk violin yang cukup simetris menandakan sebaran data yang relatif mendekati normal, dengan sedikit kemiringan ke arah berat rendah.

2. Ridgeline Plot Indeks Pembangunan Manusia per Benua

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:

  • Puncak kurva menunjukkan nilai IPM yang paling sering muncul pada benua tersebut.
  • Europe puncaknya paling kanan (sekitar 0,9), jadi IPM negara-negara Eropa umumnya tinggi dan sebarannya relatif sempit (homogen).
  • Africa puncaknya paling kiri (sekitar 0,5), jadi IPM mayoritas negara Afrika tergolong rendah, dengan sedikit negara di nilai yang lebih tinggi.
  • Asia berbentuk lebar dengan beberapa puncak, artinya IPM antar negara Asia sangat beragam, dari menengah sampai sangat tinggi.
  • Oceania memiliki tiga puncak yang terpisah, menandakan adanya kelompok negara dengan tingkat pembangunan yang berbeda-beda.
  • Kurva yang lebih lebar berarti ketimpangan antar negara dalam benua itu lebih besar, sedangkan kurva yang sempit berarti nilainya seragam.

3. Visualisasi Arah (Network Graph) Perdagangan Antar Negara ASEAN

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:

  • Node oranye adalah Indonesia sebagai fokus analisis. Node abu-abu (Vietnam dan Kamboja) adalah negara yang hubungan dagangnya relatif sedikit.
  • Garis paling tebal ada di antara Singapura dan Malaysia, artinya volume perdagangan dua arah di antara keduanya paling besar pada data dummy ini.
  • Indonesia memiliki hubungan dagang yang kuat dengan Singapura, Malaysia, dan Thailand (garis merah relatif tebal). Hubungan dengan Filipina lebih tipis, artinya volumenya lebih kecil.
  • Jika dua negara punya panah di kedua arah, perdagangannya berlangsung timbal balik. Tebal-tipis dua garis itu menunjukkan arah mana yang volumenya lebih besar (ekspor lebih besar dari impor atau sebaliknya).
  • Negara dengan banyak garis tebal yang terhubung (seperti Singapura) berperan sebagai pusat (hub) perdagangan di kawasan.

4. Diagram Batang dengan Error Bar

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:

  • Pada panel kiri, tinggi batang menurun sedikit dari 2012 ke 2015, sehingga terlihat seolah persentase petani lahan kecil terus turun.
  • Pada panel kanan, error bar menunjukkan bahwa nilai sebenarnya bisa berada di rentang tertentu (sekitar ±3 poin persentase), bukan hanya satu angka pasti.
  • Karena error bar antar tahun saling tumpang tindih, penurunan dari tahun ke tahun belum tentu bermakna secara statistik. Bisa jadi perbedaan itu hanya akibat variasi sampel.
  • Pelajaran dari grafik ini: menampilkan error bar membuat kesimpulan lebih jujur, karena pembaca bisa menilai seberapa yakin kita terhadap perbedaan antar batang.

5. Peta Tematik (Choropleth) Tingkat Kemiskinan Provinsi

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:

  • Provinsi berwarna kuning pucat memiliki tingkat kemiskinan rendah (sekitar 5 sampai 8%), sedangkan provinsi berwarna merah tua memiliki tingkat kemiskinan paling tinggi (mendekati 27%).
  • Pada data dummy ini, provinsi di wilayah Papua paling gelap, menandakan tingkat kemiskinan tertinggi. Provinsi di sekitar Maluku dan Nusa Tenggara juga berwarna lebih gelap.
  • Provinsi di Pulau Jawa dan Kalimantan cenderung berwarna terang, artinya tingkat kemiskinannya relatif rendah.
  • Pola ini menunjukkan adanya kesenjangan antar wilayah: kemiskinan cenderung lebih tinggi di Indonesia bagian timur dibandingkan bagian barat.
  • Peta ini hanya menunjukkan tingkat kemiskinan relatif per provinsi dan tidak menunjukkan jumlah penduduk miskin. Provinsi padat penduduk bisa punya persentase rendah, tetapi jumlah orang miskinnya tetap besar.

Kesimpulan

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.