Visualisasi Data dengan Matplotlib
Line, bar, histogram: ubah angka jadi grafik yang bercerita. Termasuk tugas mini dashboard.
Angka itu bahan mentah, grafik itu hidangannya
Analogi: dataset mentah seperti bahan makanan di pasar, bergizi tapi tidak ada yang mau mengunyahnya mentah-mentah. Visualisasi adalah proses memasaknya: memilih bahan (data), teknik masak (jenis grafik), dan plating (label, warna) sampai stakeholder mau "memakannya", alias paham insight-nya dalam 10 detik. Manusia memproses gambar jauh lebih cepat daripada tabel, jadi grafik yang baik menjawab pertanyaan sebelum sempat ditanyakan.
Kenapa penting buat data analyst? Karena analisis yang tidak divisualkan biasanya tidak dibaca. Laporan berisi tabel 10 ribu baris akan dilewati atasan, tapi satu grafik tren yang naik turun langsung memicu diskusi. Skill visualisasi adalah pembeda antara analyst yang datanya "nyangkut di notebook" dan yang insight-nya dipakai mengambil keputusan.
Contoh pertama, grafik garis untuk tren. Hukum wajibnya: tiap grafik punya title, xlabel, ylabel.
import matplotlib.pyplot as plt
bulan = ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun"]
omzet = [120, 150, 130, 180, 170, 210]
plt.plot(bulan, omzet, marker="o")
plt.title("Tren Omzet Semester 1 2026")
plt.xlabel("Bulan")
plt.ylabel("Omzet (juta rupiah)")
plt.grid(True, alpha=0.3)
plt.show()Contoh kedua, lebih realistis: mini dashboard 3 panel dalam satu figure, lengkap dengan styling yang rapi.
import numpy as np
produk = ["Kopi", "Teh", "Susu", "Roti"]
terjual = [120, 85, 60, 95]
transaksi = np.random.normal(45000, 12000, 300)
fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(12, 4))
ax1.plot(bulan, omzet, marker="o", color="#8B5CF6")
ax1.set_title("Tren Omzet")
ax1.set_xlabel("Bulan"); ax1.set_ylabel("Juta rupiah")
ax2.bar(produk, terjual, color="#38bdf8")
ax2.set_title("Terjual per Produk")
ax2.set_xlabel("Produk"); ax2.set_ylabel("Unit")
ax3.hist(transaksi, bins=20, color="#22c55e", edgecolor="white")
ax3.set_title("Distribusi Nilai Transaksi")
ax3.set_xlabel("Rupiah"); ax3.set_ylabel("Frekuensi")
plt.tight_layout()
plt.savefig("dashboard.png", dpi=150)
plt.show()Perhatikan polanya: plt.subplots() membuat figure berisi beberapa axes, tiap axes digambar terpisah, tight_layout() mencegah label saling tumpuk. Memakai objek ax (bukan plt. global) adalah gaya yang disarankan begitu grafikmu lebih dari satu, karena tiap panel bisa diatur sendiri-sendiri.
Aturan memilih jenis grafik: tren sepanjang waktu pakai line, perbandingan antar kategori pakai bar, sebaran nilai pakai histogram. Salah pilih grafik bisa menyesatkan pembaca meski datanya 100% benar, misalnya pie chart dengan 20 potong yang tidak bisa dibedakan matanya.
Jebakan umum
SALAH: memanggil plt.show() dulu baru plt.savefig().
plt.plot(bulan, omzet)
plt.show()
plt.savefig("grafik.png") # file kosong!BENAR: simpan dulu, tampilkan belakangan.
plt.plot(bulan, omzet)
plt.savefig("grafik.png") # canvas masih utuh
plt.show()Penjelasannya: show() "menghabiskan" figure yang sedang aktif di beberapa backend, sehingga save setelahnya menghasilkan kanvas kosong. Urutan yang aman selalu save-then-show.
SALAH: grafik tanpa label sumbu dan judul, mengandalkan pembaca menebak-nebak.
plt.bar(produk, terjual)
plt.show() # angka 120 itu apa? unit? juta? tidak ada yang tahuBENAR: selalu lengkapi tiga label, tambahkan grid kalau membantu dibaca.
plt.bar(produk, terjual, color="#8B5CF6")
plt.title("Unit Terjual per Produk, Juni 2026")
plt.xlabel("Produk"); plt.ylabel("Unit terjual")
plt.show()Catatan teknis: Untuk laporan yang diekspor ke PNG/PDF, atur
figsizedandpisejak awal (plt.savefig("x.png", dpi=150)). Grafik default 6.4x4.8 inci terlihat kecil dan pecah saat ditempel di slide presentasi, masalah klasik dashboard yang dibuat terburu-buru.
Tantangan
Grafik penjualan mingguan
Buat bar chart penjualan 7 hari (Senin-Minggu) dengan data bebas. Tambahkan title, label sumbu, dan warna berbeda untuk hari dengan penjualan tertinggi.
Tugas
Tugas: Mini Dashboard Penjualan
Buat script Python yang menghasilkan satu figure berisi 3 subplot: (1) line chart tren omzet 6 bulan, (2) bar chart penjualan per produk (minimal 4 produk), (3) histogram distribusi nilai transaksi (minimal 100 data acak). Setiap subplot wajib punya title dan label sumbu. Simpan figure sebagai file dashboard.png dengan plt.savefig().
Kriteria penilaian:
- Ada tepat 3 subplot dalam satu figure
- Setiap subplot punya title, xlabel, dan ylabel
- Jenis grafik sesuai datanya (line/bar/hist)
- File dashboard.png berhasil tersimpan
- Kode rapi dan bisa dijalankan ulang
AI tutor akan memeriksa bug, kesalahan syntax, dan memberi saran perbaikan.