Analisis pada chapter sebelumnya berakhir di angka: total 92 gelas, pendapatan 2.040 ribu rupiah untuk kopi susu, tiga transaksi terlaris. Angka-angka itu akurat, tetapi mata manusia membaca pola jauh lebih cepat dari bentuk gambar daripada barisan digit — dan audiens kita (atasan, klien, tim) hampir selalu membaca laporan lewat grafik. Matplotlib adalah library gambar grafik paling dasar di Python; seaborn yang kita pakai nanti pun dibangun di atasnya. Pada chapter penutup Section ini kita membuat diagram garis dan diagram batang pertama kita, melengkapi grafik dengan judul, label, grid, dan legend, lalu menyimpannya ke berkas gambar.
Dua Gaya Penulisan: pyplot dan Object-Oriented #
Matplotlib menyediakan dua antarmuka. Gaya pyplot memakai fungsi global plt.* yang menggambar ke “gambar aktif” — pendek dan cepat. Gaya object-oriented memakai pasangan fig, ax yang kita pegang secara eksplisit — sedikit lebih panjang, tetapi kendali penuh:
| Aspek | Gaya pyplot (plt.*) | Gaya object-oriented (fig, ax) |
|---|---|---|
| Cara kerja | Fungsi global menggambar ke gambar aktif | Object fig (kanvas) dan ax (bidang gambar) dipegang eksplisit |
| Kekuatan | Paling ringkas untuk sketsa cepat | Rapi untuk banyak grafik, kustomisasi, dan penyimpanan |
| Contoh pemanggilan | plt.plot(...), plt.title(...) | ax.plot(...), ax.set_title(...) |
Kita coba keduanya. Pertama, diagram garis penjualan kopi susu lima hari dalam gaya pyplot:
import matplotlib.pyplot as plt
hari = ["Senin", "Selasa", "Rabu", "Kamis", "Jumat"]
kopi_susu = [12, 15, 10, 18, 16]
plt.plot(hari, kopi_susu, marker="o", color="steelblue")
plt.title("Penjualan Kopi Susu Sepekan")
plt.xlabel("Hari")
plt.ylabel("Gelas terjual")
plt.grid(True)
plt.show()Grafik yang dihasilkan berupa satu garis biru yang menghubungkan lima titik berpenanda lingkaran: naik ke 15 gelas pada Selasa, turun ke titik terendah 10 pada Rabu, melompat ke puncak 18 pada Kamis, lalu sedikit mereda ke 16 pada Jumat. Judul berada di bagian atas, nama hari terentang di sumbu mendatar, jumlah gelas di sumbu tegak, dan garis bantu (grid) tipis memudahkan pembacaan nilai antar titik.
Gaya Object-Oriented: figure dan axes #
Dua kata dalam gaya ini sering tertukar. Figure adalah kanvas penuh — jendela atau berkas gambar. Axes adalah satu bidang gambar di dalam kanvas: area tempat batang, garis, judul, dan label sumbu tinggal. plt.subplots() membuat keduanya sekaligus dan mengembalikannya sebagai fig, ax — memakai istilah OOP chapter sebelumnya, ax adalah object dengan puluhan method gambar.
Kita gambar ulang temuan groupby chapter Dasar Pandas sebagai diagram batang pendapatan per produk:
import matplotlib.pyplot as plt
produk = ["kopi susu", "matcha latte", "teh tawar"]
pendapatan = [2040, 1428, 560] # ribu rupiah, hasil groupby bab sebelumnya
fig, ax = plt.subplots(figsize=(6, 3.5))
ax.bar(produk, pendapatan, color=["saddlebrown", "seagreen", "plum"])
ax.set_title("Pendapatan per Produk Sepekan")
ax.set_xlabel("Produk")
ax.set_ylabel("Pendapatan (ribu rupiah)")
ax.grid(axis="y")
plt.show()Bentuk grafiknya: tiga batang tegak berdiri di atas nama produk — batang cokelat kopi susu tertinggi di 2.040, batang hijau matcha latte di 1.428, dan batang ungu muda teh tawar terpendek di 560 (kira-kira seperempat tinggi batang kopi susu). Grid hanya digambar mendatar karena axis="y" — garis bantu cukup satu arah untuk membantu membandingkan tinggi batang. Perhatikan pembeda penting dengan gaya pyplot: pengaturan judul dan label kini menjadi method ax.set_title(), ax.set_xlabel(), dan ax.set_ylabel(), bukan plt.title() dan kawan-kawannya.
Melengkapi Grafik: Legend, Warna, dan Beberapa Deret #
Grafik kerap memuat lebih dari satu deret data, dan pembaca perlu tahu mana yang mana — di situlah legend berperan. Kita bandingkan dua produk sekaligus pada satu bidang gambar:
import matplotlib.pyplot as plt
hari = ["Senin", "Selasa", "Rabu", "Kamis", "Jumat"]
kopi_susu = [12, 15, 10, 18, 16]
teh_tawar = [6, 4, 8, 7, 9]
fig, ax = plt.subplots(figsize=(6, 3.5))
ax.plot(hari, kopi_susu, marker="o", color="saddlebrown", label="kopi susu")
ax.plot(hari, teh_tawar, marker="s", color="seagreen", label="teh tawar")
ax.set_title("Penjualan Dua Produk Sepekan")
ax.set_xlabel("Hari")
ax.set_ylabel("Gelas terjual")
ax.grid(True)
ax.legend()
plt.show()Dua garis kini tinggal di bidang yang sama: garis cokelat kopi susu dengan penanda lingkaran seluruhnya berada di atas garis hijau teh tawar berpenanda kotak — kopi susu tidak sekali pun terjual di bawah teh tawar sepekan itu. Kotak kecil legend di dalam grafik memetakan warna ke nama produk, diambil otomatis dari argumen label="..." pada tiap pemanggilan plot(). Warna kita tentukan lewat nama warna matplotlib ("saddlebrown", "seagreen"), dan marker="o" serta marker="s" membedakan bentuk titik agar grafik tetap terbaca meski dicetak tanpa warna.
Menyimpan Grafik dengan savefig #
plt.show() menampilkan grafik di layar; untuk laporan kita perlu berkas gambar. Tugas itu dipegang plt.savefig(nama_berkas) yang dipanggil sebelum plt.show():
import matplotlib.pyplot as plt
produk = ["kopi susu", "matcha latte", "teh tawar"]
pendapatan = [2040, 1428, 560]
fig, ax = plt.subplots(figsize=(6, 3.5))
ax.bar(produk, pendapatan, color="saddlebrown")
ax.set_title("Pendapatan per Produk Sepekan")
ax.set_xlabel("Produk")
ax.set_ylabel("Pendapatan (ribu rupiah)")
plt.savefig("pendapatan.png", dpi=150, bbox_inches="tight")
plt.show()Menjalankan blok tersebut menghasilkan grafik yang sama seperti contoh diagram batang sebelumnya — tiga batang cokelat dengan kopi susu tertinggi — kali ini juga tersimpan sebagai berkas pendapatan.png di folder kerja. Tiga argumennya: nama berkas sekaligus menentukan formatnya lewat ekstensi (.png, .svg, .pdf), dpi=150 mengatur ketajaman resolusi, dan bbox_inches="tight" memangkas ruang kosong di tepi gambar sehingga grafik terpotong pas.
Rangkuman #
- Matplotlib punya dua gaya: pyplot (
plt.*) untuk sketsa cepat, dan object-oriented (fig, ax) untuk kerja serius — kita anjurkan yang kedua. - Figure adalah kanvas penuh; axes adalah satu bidang gambar di dalamnya;
plt.subplots()membuat keduanya sekaligus. - Diagram garis memakai
ax.plot(), diagram batang memakaiax.bar(); judul, label sumbu, grid, dan legend melengkapi grafik agar berdiri sendiri. - Argumen
label="..."mengisi legend;colordanmarkermembedakan deret data. plt.savefig("nama.png", dpi=150, bbox_inches="tight")menyimpan grafik ke berkas gambar sebelumplt.show().
Dengan ini peralatan Python kita lengkap: NumPy menghitung, pandas memproses tabel, matplotlib menggambar temuan — dan OOP membuat API ketiganya bisa dibaca. Selanjutnya kita mundur selangkah dari alat ke bahan bakarnya: data itu sendiri. Apa itu data, bagaimana ia diklasifikasikan, skala pengukuran mana yang berlaku, dan seperti apa wujud data tabular yang sehat — semuanya kita bedah pada Section Dasar-Dasar Data .
Referensi #
- Matplotlib — User’s Guide — panduan resmi, termasuk perbandingan antarmuka pyplot dan object-oriented.
- Matplotlib — Plot Types — galeri resmi jenis grafik beserta kode minimalnya.