Grafik yang menyesatkan jarang berupa kebohongan angka, melainkan angka yang benar pada bingkai yang salah. Topik ini membedah tiga bentuk penipuan yang paling umum, yaitu sumbu yang terpotong, hiasan yang mengalahkan data, dan encode yang bertukar urutan, dan memperbaikinya satu per satu pada data yang sama. Setelah membacanya, setiap grafik laporan lolos pemeriksaan kejujuran yang dapat dinyatakan dalam lima pertanyaan.
Sumbu terpotong: selisih kecil menjadi raksasa#
Grafik batang bekerja karena tingginya sebanding dengan nilainya, dan batas sumbu yang dimulai di atas nol memutus perbandingan itu. Selisih dua rata-rata PM2.5 yang sebenarnya 21.1 unit pada skala 0 sampai 60 dapat tampak seperti perbedaan dua kali lipat apabila sumbunya dipaksa mulai dari 30, dan inilah penipuan visual yang paling sering lolos ke laporan resmi.
Skrip berikut menggambar data yang sama dua kali, satu dengan sumbu terpotong dan satu dengan sumbu penuh, agar perbedaannya terlihat sebagai pasangan.
"""Sumbu yang terpotong membuat selisih kecil terlihat besar."""
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["stasiun"] = (
data["stasiun"].str.strip().str.replace(r"\s+", " ", regex=True).str.title()
)
sah = data[data["pm25"] < 500]
rata = sah.groupby("stasiun")["pm25"].mean()
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(7.6, 3.4), constrained_layout=True)
ax1.bar(rata.index, rata.values, color=["#4c72b0", "#c44e52"], width=0.5)
ax1.set_ylim(30, 60) # sumbu terpotong: selisih terlihat raksasa
ax1.set_title("Menyesatkan: sumbu mulai dari 30")
ax2.bar(rata.index, rata.values, color=["#4c72b0", "#c44e52"], width=0.5)
ax2.set_ylim(0, 60) # sumbu penuh: proporsi terlihat jujur
ax2.set_title("Jujur: sumbu mulai dari 0")
for ax in (ax1, ax2):
ax.set_ylabel("rata-rata PM2.5")
fig.savefig("sumbu-menipu.png", dpi=110)
print("tersimpan: sumbu-menipu.png")
print("selisih sebenarnya:", round(rata.max() - rata.min(), 1))tersimpan: sumbu-menipu.png
selisih sebenarnya: 21.1
Angkanya sama persis pada kedua panel, dan perbedaannya hanya batas sumbu. Aturan yang sah dan mudah dipegang adalah batang dimulai dari nol, sedangkan garis bebas memakai rentang yang dipersempit karena perubahannya dibaca dari kemiringan, bukan dari tinggi, dan bahkan garis sebaiknya mencantumkan rentangnya secara eksplisit bila dipotong.
Hiasan yang mengalahkan data#
Chart junk adalah elemen yang menambah tinta tanpa menambah informasi, mulai dari latar bergradasi, bayangan pada batang, ikon tiga dimensi, sampai warna berlebih pada kategori yang sama. Semuanya memakai perhatian pembaca untuk hal yang bukan data, dan pada grafik kecil di dalam laporan, hiasan tersebut justru menggeser detail yang penting.
Pembersihannya diarahkan pada tiga tinta. Tinta data ditingkatkan, yaitu garis dan titik yang membawa makna, tinta non-data dikurangi, seperti garis kisi yang dipertipus dan bingkai yang dihilangkan, dan tinta yang menghancurkan data dihapus, seperti efek tiga dimensi yang mengubah luas bidang tanpa makna apa pun.
Prinsipnya bukan grafik yang polos tanpa desain, melainkan desain yang bekerja untuk data. Satu warna aksen pada batang yang ingin disorot, judul yang menyatakan temuan, dan tanda panah kecil pada satu titik penting adalah hiasan yang sah, karena ketiganya mengarahkan perhatian pada informasi.
Encode yang bertukar urutan#
Kejujuran juga menyentuh pilihan encode, yaitu properti visual yang mewakili nilai. Encode yang paling dapat dibaca manusia adalah posisi pada sumbu, diikuti panjang, kemudian sudut dan luas, dan terakhir warna yang dipetakan ke angka. Pie chart meletakkan perbandingannya pada sudut, dan heatmap pada warna, sehingga keduanya hanya dipakai bila perbandingannya memang paling mudah dibaca pada tingkat itu.
Warna yang dipetakan ke nilai juga menuntut kehati-hatian ganda, yaitu skala berurutan untuk nilai yang berurutan dan skala yang dibedakan warna untuk kategori, serta pemilihan yang tetap terbaca bagi pembaca dengan buta warna. Peta panas dua warna yang jelas lebih jujur daripada gradasi pelangi yang memotong skala di tempat yang tak terlihat.
Pemeriksaan praktisnya murah, yaitu grafik yang diubah ke hitam putih masih harus menyampaikan urutan dan kelompoknya. Bila dua kategori menyatu ketika warnanya hilang, encode yang dipakai bukan posisi, dan perbaikannya adalah menggeser perbedaan ke sumbu atau panjang.
Pemeriksaan lima pertanyaan#
Setiap grafik laporan melewati lima pertanyaan sebelum dinyatakan siap, dan semuanya dapat dijawab sekali pandang. Apakah sumbu batangnya dimulai dari nol, apakah setiap sumbu berlabel beserta satuannya, apakah setiap warna dan bentuk menjawab makna yang nyata, apakah hiasan yang tersisa mengarahkan perhatian pada data, dan apakah grafik masih benar ketika dicetak hitam putih.
Grafik yang gagal pada satu pertanyaan belum berarti jujurnya dipertanyakan, melainkan berarti bingkainya perlu diperbaiki, dan perbaikannya hampir selalu selesai dalam beberapa baris pengaturan pada axes.
Kebiasaan yang menyertai adalah menyimpan grafik beserta kodenya, karena kejujuran yang dapat diverifikasi adalah grafik yang bisa dibangun ulang dari datanya, dan inilah benang merah menuju modul reproduktibilitas.
Kesalahan umum#
Kesalahan pertama adalah memotong sumbu batang karena selisihnya kecil dan grafiknya terlihat datar. Datanya memang menunjukkan selisih kecil, dan menyajikannya sebagai jurang adalah kebohongan yang paling mudah ditemukan pembaca yang teliti.
Kesalahan kedua adalah memperlakukan warna sebagai variasi. Warna yang berbeda pada kategori yang sama, atau gradasi pelangi pada nilai berurutan, membuat pembaca menemukan pola yang tidak ada dalam data.
Kesalahan ketiga adalah menyalin gaya grafik dari media komersial yang mengejar perhatian. Tujuan grafik analisis adalah keputusan yang benar, dan gaya yang ditiru membawa tujuan penjualannya ikut serta.
Ringkasan#
- Batang dimulai dari nol, garis boleh dipotong dengan rentang yang dinyatakan, dan selisih 21.1 dapat tampak dua kali lipat hanya lewat batas sumbu.
- Hiasan diurutkan menurut jasa, yaitu tinta data ditingkatkan, non-data dikurangi, dan yang menghancurkan data dihapus.
- Encode diurutkan dari posisi, panjang, sudut dan luas, sampai warna, dan grafik tetap benar bila dicetak hitam putih.
- Lima pertanyaan kejujuran menjadi pemeriksaan baku sebelum grafik masuk laporan.
Referensi#
- The Visual Display of Quantitative Information — Edward Tufte, Graphics Press — rujukan klasik rasio tinta data dan kejujuran grafik.
- matplotlib.axes.Axes.set_ylim — Matplotlib documentation — rujukan resmi pengaturan batas sumbu yang dipakai topik ini.