Data yang sama dapat menghasilkan kesan yang bertolak belakang, tergantung pada cara sumbu dan skalanya diatur. Topik ini membahas cara menjaga kejujuran grafik, dimulai dari sumbu vertikal grafik batang yang wajib dimulai dari nol, dilanjutkan aturan rentang untuk grafik garis, dan ditutup dengan daftar pemeriksaan yang mencakup skala, warna, dan proporsi. Setiap aturan disertai contoh kode yang menghasilkan gambar pembandingnya, sehingga efek setiap pilihan terlihat langsung.
Sumbu batang yang dipotong#
Panjang batang menyandikan nilai, sehingga garis dasar grafik batang harus berada pada nol. Apabila sumbu vertikal dipotong, misalnya dimulai dari 75, batang yang seharusnya hampir sama panjangnya tampak berbeda jauh dan selisih kecil terlihat seperti selisih besar. Pemotongan seperti ini biasanya tidak disengaja, misalnya ketika rentang sumbu diatur agar label tidak bertumpuk, tetapi akibatnya bagi pembaca tetap sama.
Berkas dua-sumbu.py berikut menggambar data yang sama dua kali dalam satu skrip. Data berupa nilai rata-rata ujian tiga kelas, yaitu 76, 80, dan 81. Versi pertama memotong sumbu vertikal dengan ax.set_ylim(75, 82), sedangkan versi kedua memulainya dari nol dengan ax.set_ylim(0, 90). Selain rentang sumbu, tidak ada perbedaan lain antara kedua gambar.
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
kelas = ["7A", "7B", "7C"]
nilai_rata = [76, 80, 81]
# versi menyesatkan, sumbu vertikal dipotong
fig, ax = plt.subplots()
ax.bar(kelas, nilai_rata)
ax.set_ylim(75, 82)
ax.set_xlabel("Kelas")
ax.set_ylabel("Nilai rata-rata")
ax.set_title("Nilai rata-rata ujian matematika per kelas")
plt.savefig("batang-dipotong.png", dpi=120)
print("Grafik tersimpan: batang-dipotong.png")
# versi jujur, sumbu vertikal dimulai dari nol
fig, ax = plt.subplots()
ax.bar(kelas, nilai_rata)
ax.set_ylim(0, 90)
ax.set_xlabel("Kelas")
ax.set_ylabel("Nilai rata-rata")
ax.set_title("Nilai rata-rata ujian matematika per kelas")
plt.savefig("batang-dari-nol.png", dpi=120)
print("Grafik tersimpan: batang-dari-nol.png")Grafik tersimpan: batang-dipotong.png
Grafik tersimpan: batang-dari-nol.pngMembandingkan kedua versi#


Kedua grafik menampilkan data yang persis sama, tetapi kesannya berbeda. Pada versi terpotong, batang kelas 7A nyaris tidak terlihat karena hanya mencapai satu poin di atas batas bawah sumbu, sedangkan batang kelas 7C tampak menjulang. Kesannya, kelas 7C mengungguli kelas 7A secara drastis. Pada versi dari nol, ketiga batang tampak hampir sama tinggi dan selisih lima poin terbaca sebagai perbedaan kecil yang wajar.
Selisih lima poin memang nyata, tetapi besarnya harus sebanding dengan skala. Nilai 76 dan 81 hanya berbeda sekitar enam persen, sedangkan versi terpotong menampilkannya seolah-olah beberapa kali lipat. Grafik yang jujur membuat besaran visual sebanding dengan besaran angkanya. Apabila selisih kecil memang fokus pembahasan, solusi yang lebih baik berupa tabel angka, grafik titik dengan label nilai, atau pernyataan langsung dalam prosa, bukan pemotongan sumbu batang.
Grafik garis dan aturan nol#
Untuk grafik garis, kejujuran bekerja dengan aturan yang berbeda. Garis menyandikan nilai melalui posisi titik, bukan melalui panjang, sehingga sumbu vertikalnya tidak wajib dimulai dari nol. Memaksakan nol justru dapat menyembunyikan tren yang penting, misalnya pergerakan peminjaman buku yang berlangsung dalam rentang 289 sampai 441.
Berkas sumbu-garis.py berikut menggambar deret peminjaman enam bulan yang sama dua kali. Versi pertama mengunci sumbu vertikal dari 0 sampai 500 dengan ax.set_ylim(0, 500), sedangkan versi kedua membiarkan matplotlib memilih rentangnya secara otomatis. Rentang 0 sampai 500 dipilih agar label sumbunya jatuh pada kelipatan ratusan yang mudah dibaca.
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
bulan = ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun"]
peminjaman = [312, 289, 347, 402, 386, 441]
# sumbu vertikal dimulai dari nol
fig, ax = plt.subplots()
ax.plot(bulan, peminjaman, marker="o")
ax.set_ylim(0, 500)
ax.set_xlabel("Bulan")
ax.set_ylabel("Jumlah peminjaman")
ax.set_title("Peminjaman buku semester pertama")
plt.savefig("garis-dari-nol.png", dpi=120)
print("Grafik tersimpan: garis-dari-nol.png")
# sumbu vertikal mengikuti rentang data secara otomatis
fig, ax = plt.subplots()
ax.plot(bulan, peminjaman, marker="o")
ax.set_xlabel("Bulan")
ax.set_ylabel("Jumlah peminjaman")
ax.set_title("Peminjaman buku semester pertama")
plt.savefig("garis-otomatis.png", dpi=120)
print("Grafik tersimpan: garis-otomatis.png")Grafik tersimpan: garis-dari-nol.png
Grafik tersimpan: garis-otomatis.png

Kedua versi sama-sama jujur karena tidak ada nilai yang diubah, tetapi pesannya berbeda. Versi dari nol menonjolkan besaran total peminjaman terhadap nol, sehingga cocok ketika pembahasan menyentuh target atau kapasitas. Versi otomatis menonjolkan arah dan titik balik tren, sehingga naik-turunnya terlihat jelas. Pilih rentang berdasarkan pesan yang disampaikan, dan pastikan rentangnya terbaca pada sumbu agar pembaca dapat menilainya sendiri.
Aturan menjaga kejujuran#
Pemeriksaan sumbu hanya mencakup satu sisi kejujuran grafik, sehingga aturan berikut melengkapinya untuk skala, warna, dan proporsi.
- Garis dasar grafik batang wajib berada pada nol, karena panjang batang adalah nilai itu sendiri.
- Rentang grafik garis boleh mengikuti data, tetapi harus konsisten antargrafik yang dibandingkan berdampingan, karena dua rentang berbeda membuat dua tren tampak berbeda padahal datanya setara.
- Skala pada panel-panel yang sejajar harus sama, karena selisih hanya bermakna apabila diukur dengan ukuran yang sama.
- Warna diperlakukan sebagai informasi, bukan hiasan. Intensitas warna sebaiknya sebanding dengan nilai, dan pasangan merah-hijau dihindari karena menyiratkan penilaian baik-buruk yang belum tentu didukung data.
- Kemiringan garis berubah mengikuti rasio lebar dan tinggi gambar, sehingga perbandingan kemiringan antargrafik hanya sah apabila rasionya sama.
- Satuan dan sumber data dicantumkan pada label sumbu atau keterangan gambar, sehingga angkanya dapat ditelusuri kembali.
Ringkasan#
- Panjang batang menyandikan nilai, sehingga sumbu vertikal grafik batang wajib dimulai dari nol.
- Sumbu terpotong membesarkan selisih kecil secara visual dan membuat grafik menyesatkan.
- Grafik garis menyandikan nilai sebagai posisi, sehingga rentang sumbunya boleh mengikuti rentang data.
- Kejujuran juga dijaga melalui skala antarpanel, penggunaan warna, rasio lebar tinggi, dan pencantuman sumber data.
Referensi#
- Matplotlib Documentation — Matplotlib
— Dokumentasi resmi matplotlib, termasuk pengaturan rentang sumbu melalui
set_ylimdan pengaturan warna. - The matplotlib Gallery — Matplotlib — Galeri contoh yang memperlihatkan pengaturan sumbu, skala, dan warna pada berbagai jenis grafik.