Grafik yang salah bentuk tetap berfungsi dan tetap tercetak, tetapi ia menjawab pertanyaan yang tidak diajukan. Topik ini menyusun keputusan pemilihan grafik dari pertanyaan analisisnya, memperagakan empat bentuk dasar pada data yang sama, dan menutupnya dengan tabel rujukan yang dipakai untuk seluruh laporan jalur ini. Setelah membacanya, satu pertanyaan selalu berujung pada satu bentuk yang paling menjawabnya.
Pertanyaan lebih dahulu daripada bentuk#
Pemilihan grafik dimulai dari kalimat pertanyaan, dan empat pertanyaan yang paling sering muncul pada analisis data membentuk empat keluarga bentuk. Pertanyaan kapan nilai naik turunnya dijawab garis, berapa nilainya per kelompok dijawab batang, bagaimana dua variabel terkait dijawab sebar, dan bagaimana sebarannya di dalam kelompok dijawab kotak.
Urutan tersebut bukan kebetulan, melainkan tipe pertanyaan yang berbeda, yaitu perubahan sepanjang waktu, perbandingan antar kategori, hubungan dua angka, dan distribusi. Skrip berikut menyandingkan keempatnya pada data pengukuran yang sama, sehingga kekuatan dan keterbatasan setiap bentuk terlihat berdampingan.
"""Satu data, empat pertanyaan, empat bentuk grafik."""
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import pandas as pd
data = pd.read_csv(
"ukuran_udara.csv",
na_values=["kosong", "-999.0"],
dtype={"pm25": "string", "kelembapan": "string"},
)
data["pm25"] = data["pm25"].astype("float")
data["waktu"] = pd.to_datetime(data["waktu"], format="mixed", dayfirst=True)
data["stasiun"] = (
data["stasiun"].str.strip().str.replace(r"\s+", " ", regex=True).str.title()
)
sah = data[data["pm25"] < 500]
fig, axes = plt.subplots(2, 2, figsize=(7.6, 5.6), constrained_layout=True)
per_jam = sah.groupby(sah["waktu"].dt.floor("h"))["pm25"].mean()
axes[0, 0].plot(per_jam.index, per_jam.values, color="#4c72b0")
axes[0, 0].set_title("Kapan naik turunnya? garis")
axes[0, 0].tick_params(axis="x", rotation=45, labelsize=7)
per_stasiun = sah.groupby("stasiun")["pm25"].mean()
axes[0, 1].bar(per_stasiun.index, per_stasiun.values, color="#55a868", width=0.5)
axes[0, 1].set_title("Berapa per kelompok? batang")
axes[0, 1].set_ylim(0, 60)
axes[1, 0].scatter(sah["suhu_c"], sah["pm25"], s=14, alpha=0.6, color="#c44e52")
axes[1, 0].set_title("Bagaimana dua angka terkait? sebar")
axes[1, 0].set_xlabel("suhu (derajat Celsius)")
sah.boxplot(column="pm25", by="stasiun", ax=axes[1, 1])
axes[1, 1].set_title("Bagaimana sebarannya? kotak")
axes[1, 1].set_xlabel("")
fig.suptitle("")
fig.savefig("pemilihan-grafik.png", dpi=110)
print("tersimpan: pemilihan-grafik.png")tersimpan: pemilihan-grafik.png
Empat panel di atas memakai data yang sama, dan masing-masing menjawab pertanyaan yang berbeda dengan jujur. Panel garis memperlihatkan lonjakan pagi yang mengulang, panel batang membandingkan dua rata-rata dengan sumbu penuh, panel sebar memperlihatkan kenaikan perlahan terhadap suhu, dan panel kotak menunjukkan sebaran per stasiun yang hampir tak bertumpang tindih.
Tabel rujukan pemilihan#
Keputusan yang sama dirangkum menjadi tabel rujukan yang dipakai sepanjang jalur ini, dari laporan EDA sampai dek presentasi.
| Pertanyaan analisis | Bentuk yang menjawab | Catatan |
|---|---|---|
| Bagaimana perjalanannya sepanjang waktu? | garis | sumbu waktu selalu mendatar dan penuh |
| Berapa nilainya per kelompok? | batang | sumbu nilai dimulai dari nol |
| Bagaimana dua angka terkait? | sebar | korelasi menyertai, bukan menggantikan |
| Bagaimana sebaran per kelompok? | kotak atau titik | kelompok kecil ditampilkan sebagai titik |
| Bagaimana komposisi satu keseluruhan? | batang bertumpuk | lingkaran hanya untuk sedikit kategori |
| Di mana letak perbedaan yang menonjol? | heatmap | warna menyatakan nilai, bukan hiasan |
Dua baris terakhir memperluas daftar tanpa mengubah prinsipnya. Komposisi yang dibaca sebagai persen dari keseluruhan cocok pada batang bertumpuk karena perbandingan tingginya tetap lurus, sedangkan lingkaran menuntut perbandingan sudut yang lebih sulit dibaca dan hanya adil untuk beberapa potongan yang jelas.
Heatmap menutup daftar untuk matriks ringkasan yang besar, misalnya rata-rata per stasiun per hari, dan warna yang dipetakan pada skala yang dinyatakan menjadikannya grafik yang sah, bukan dekorasi.
Dari grafik tunggal ke galeri laporan#
Laporan eksplorasi biasanya membutuhkan lebih dari satu grafik, dan prinsip pemilihan yang sama berlaku pada susunannya. Satu grafik menjawab satu pertanyaan, urutan grafik mengikuti urutan pertanyaan, dan judul setiap grafik menyatakan temuannya sehingga galeri dapat dibaca tanpa prosa yang panjang.
Pembacaan cepat juga menentukan bentuknya. Grafik untuk pemeriksaan sendiri boleh sekecil apa pun selama jujur, sedangkan grafik untuk laporan membawa kelengkapan dari modul matplotlib, dan grafik untuk presentasi menurunkan jumlah grafiknya drastis sebagaimana dibahas pada modul komunikasi.
Kebiasaan penutup yang murah adalah memeriksa setiap grafik dengan satu pertanyaan, yaitu “grafik ini menjawab pertanyaan apa”, dan menghapus grafik yang jawabannya tidak ditemukan.
Kesalahan umum#
Kesalahan pertama adalah grafik garis untuk kategori nominal. Garis menyatakan kesinambungan antar titik, sedangkan urutan kategori adalah hasil sortir, dan batang menjawab pertanyaan per kelompok dengan lebih jujur.
Kesalahan kedua adalah pie chart dengan banyak potongan. Sudut yang kecil sulit dibedakan dan warnanya cepat habis, sedangkan batang yang terurut menyajikan komposisi yang sama dengan pembacaan yang lebih mudah.
Kesalahan ketiga adalah memilih bentuk karena terlihat modern, misalnya heatmap kecil dengan sel sedikit atau grafik area yang saling menutupi. Bentuk yang dipilih mengikuti pertanyaan, dan tabel rujukan di atas sudah menutup sebagian besar kebutuhan.
Ringkasan#
- Empat pertanyaan dasar, yaitu perjalanan waktu, perbandingan kelompok, hubungan dua angka, dan sebaran, memetakan ke garis, batang, sebar, dan kotak.
- Batang bertumpuk dan heatmap memperluas daftar untuk komposisi dan matriks, dengan syarat skala yang dinyatakan.
- Satu grafik menjawab satu pertanyaan, dan galeri laporan mengikuti urutan pertanyaannya.
- Grafik yang tidak dapat menyebut pertanyaannya dihapus, sekecil apa pun biaya pembuatannya.
Referensi#
- matplotlib.pyplot.bar — Matplotlib documentation — rujukan resmi grafik batang yang dipakai perbandingan kelompok.
- Choosing a Good Chart 9x9 — Andrew Abela, Extreme Presentation — diagram rujukan klasik pemilihan jenis grafik menurut pertanyaan.