Setiap method .plot yang kita pakai sepanjang section ini sebenarnya sudah mengembalikan objek Matplotlib; chapter-chapter sebelumnya hanya menyimpannya lewat get_figure(). Chapter penutup ini membalik kebiasaan itu: kita membuat wadah Figure dan Axes Matplotlib terlebih dahulu, lalu menyuruh pandas menggambar di dalamnya lewat parameter ax. Dengan pola ini, dua plot pandas berdampingan dalam satu gambar, dan dua kolom dengan skala berbeda berbagi satu gambar lewat secondary_y. Inilah jembatan antara kepraktisan pandas dan fleksibilitas penuh Matplotlib.

Wadah Dulu, Plot Kemudian #

Fungsi plt.subplots dari Matplotlib membuat objek Figure beserta grid Axes. Parameter ax= pada setiap pemanggilan .plot menentukan Axes tujuan gambar — bukan membuat gambar baru:

python
import matplotlib

matplotlib.use("Agg")
import matplotlib.pyplot as plt
import pandas as pd
from pathlib import Path

bulan = ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun"]
penjualan = pd.DataFrame(
    {
        "Buku Tulis": [320, 340, 310, 380, 400, 420],
        "Pulpen": [180, 210, 230, 220, 250, 270],
        "Kertas HVS": [260, 250, 290, 300, 280, 310],
    },
    index=pd.Index(bulan, name="bulan"),
)
penjualan["pengunjung"] = [1200, 1350, 1280, 1500, 1620, 1750]

fig, axes = plt.subplots(1, 2, figsize=(11, 4))
print("Tipe fig    :", type(fig).__name__)
print("Bentuk axes :", axes.shape)

ret_bar = penjualan.plot.bar(ax=axes[0], title="Penjualan per produk")
print("ret_bar is axes[0] :", ret_bar is axes[0])

ret_line = penjualan.plot.line(
    ax=axes[1], secondary_y="pengunjung", title="Penjualan vs pengunjung"
)
print("ret_line is axes[1]:", ret_line is axes[1])
print("Legend sumbu kiri  :", [t.get_text() for t in axes[1].get_legend().get_texts()])

fig.tight_layout()
fig.savefig("integrasi_matplotlib.png", dpi=100)
print("\nPlot tersimpan sebagai integrasi_matplotlib.png")
plt.close(fig)

Path("integrasi_matplotlib.png").unlink()

Output yang Dihasilkan:

text
Tipe fig    : Figure
Bentuk axes : (2,)
ret_bar is axes[0] : True
ret_line is axes[1]: True
Legend sumbu kiri  : ['Buku Tulis', 'Pulpen', 'Kertas HVS', 'pengunjung (right)']

Plot tersimpan sebagai integrasi_matplotlib.png

Tiga baris bukti pada output menegaskan pola integrasinya. plt.subplots(1, 2, ...) menghasilkan Figure dan axes berbentuk (2,) — satu baris, dua kolom gambar. Pemeriksaan ret_bar is axes[0] bernilai True dan ret_line is axes[1] juga True: kedua plot pandas benar-benar digambar di dalam Axes yang kita siapkan, bukan pada gambar terpisah. Tanpa parameter ax, setiap pemanggilan .plot akan membuat Figure baru sebagaimana terjadi pada chapter-chapter sebelumnya.

Mari kita telaah baris-baris kuncinya:

  1. Baris 17 (penjualan["pengunjung"] = ...): kolom baru dengan skala ribuan ditambahkan — angka 1200-1750 jauh di atas rentang penjualan 180-420, alasan utama butuh dua sumbu y.
  2. Baris 19 (fig, axes = plt.subplots(1, 2, figsize=(11, 4))): gambar lebar 11 inci menampung dua Axes bersebelahan; axes adalah ndarray numpy yang bisa diindeks.
  3. Baris 23 (penjualan.plot.bar(ax=axes[0], ...)): bar plot mengisi Axes kiri; semua parameter .plot biasa tetap berlaku.
  4. Baris 26-28 (secondary_y="pengunjung"): kolom pengunjung digambar pada sumbu y kanan. Pandas menggandakan sumbu lewat Matplotlib, dan objek Axes kanannya dapat diakses lewat atribut right_ax.
  5. Baris 30 (axes[1].get_legend()): legend gabungan otomatis menandai kolom sumbu kanan dengan akhiran '(right)' — tercetak sebagai ['Buku Tulis', 'Pulpen', 'Kertas HVS', 'pengunjung (right)'].

Pola Kerja Penyimpanan dan Pembersihan #

Tiga baris penutup membentuk pola kerja yang layak dipakai di proyek nyata: fig.tight_layout() merapatkan elemen gambar agar label tidak terpotong, fig.savefig(...) menuliskan file, dan plt.close(fig) melepaskan Figure dari memori — penting saat skrip membuat banyak gambar berulang.

Section Visualisasi Data tinggal satu chapter lagi. Kegunaan Matplotlib di dunia data tidak berhenti di plotting; pandas bahkan meminjam colormap Matplotlib untuk gradasi warna tabel. Chapter berikutnya menutup section ini dengan Styler, yang mengubah DataFrame menjadi tabel laporan bergaya — angka terformat, bar di dalam sel, dan gradasi warna — tanpa menggambar satu grafik pun.

Referensi resmi: pandas.DataFrame.plot untuk parameter ax dan secondary_y, user guide visualization yang memperlihatkan plot pandas di dalam grid Matplotlib, serta matplotlib.org/stable untuk panduan plt.subplots dan siklus hidup Figure.