Setelah beberapa section berlatih mengolah angka — membersihkan data, menghitung statistika, menangani nilai hilang dan outlier — kini saatnya melihat hasilnya dalam bentuk gambar. Pola pikir manusia menangkap tren pada sebuah garis jauh lebih cepat daripada pada tabel berisi puluhan baris angka. Pandas menyediakan pintu masuk yang ringkas untuk kebutuhan itu: atribut .plot, yang mengubah DataFrame atau Series menjadi grafik Matplotlib dalam satu baris kode. Pada chapter pembuka section Visualisasi Data ini kita mempelajari cara kerja .plot, daftar jenis grafik yang tersedia, dan pola aman untuk menyimpan hasilnya ke file.
Atribut .plot dan Peran Matplotlib #
Pandas tidak menggambar grafik sendiri. Setiap kali kita memanggil method pada atribut .plot, pandas menerjemahkan data menjadi panggilan ke library Matplotlib yang terpasang di lingkungan kita. Karena itu pengetahuan Matplotlib tetap berguna: objek yang dikembalikan .plot adalah objek Matplotlib seutuhnya, bukan tipe khusus milik pandas.
Mekanisme tersebut bisa kita buktikan lewat type(). Atribut df.plot bertipe PlotAccessor — sebuah accessor, mirip accessor .str pada kolom teks. Pemanggilan df.plot.line() mengembalikan objek matplotlib.axes.Axes, yaitu area gambar tempat garis-garis diletakkan. Dari objek Axes inilah kita membaca legend, label sumbu, hingga mengambil Figure induknya untuk disimpan.
Kode Pertama: dari DataFrame ke Grafik #
Kita memakai dataset penjualan bulanan Toko Alat Tulis Sinar sepanjang Januari-Juni 2026 dengan tiga kolom produk. Dataset ini menemani kita di sepanjang section ini, sehingga perbandingan antarchapter tetap konsisten.
import matplotlib
matplotlib.use("Agg")
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"),
)
print(penjualan)
ax = penjualan.plot.line()
print("\nAtribut .plot bertipe :", type(penjualan.plot).__name__)
print("df.plot.line() mengembalikan :", type(ax).__name__)
print("Jumlah garis :", len(ax.lines))
print("Label legend :", [t.get_text() for t in ax.get_legend().get_texts()])
print("Label sumbu x otomatis :", repr(ax.get_xlabel()))
ax.get_figure().savefig("plot_pertama.png", dpi=100)
print("\nPlot tersimpan sebagai plot_pertama.png")
ax_bar = penjualan.plot(kind="bar")
print("\nkind='bar' mengembalikan :", type(ax_bar).__name__)
print("Jumlah grup bar :", len(ax_bar.containers))
Path("plot_pertama.png").unlink()Output yang Dihasilkan:
Buku Tulis Pulpen Kertas HVS
bulan
Jan 320 180 260
Feb 340 210 250
Mar 310 230 290
Apr 380 220 300
Mei 400 250 280
Jun 420 270 310
Atribut .plot bertipe : PlotAccessor
df.plot.line() mengembalikan : Axes
Jumlah garis : 3
Label legend : ['Buku Tulis', 'Pulpen', 'Kertas HVS']
Label sumbu x otomatis : 'bulan'
Plot tersimpan sebagai plot_pertama.png
kind='bar' mengembalikan : Axes
Jumlah grup bar : 3Output menegaskan tiga hal. Pertama, type() melaporkan PlotAccessor untuk atribut .plot dan Axes untuk hasil method-nya. Kedua, satu pemanggilan df.plot.line() menggambar tiga garis sekaligus — satu per kolom numerik — dan legend berisi nama kolom dibuat otomatis. Ketiga, label sumbu x terisi 'bulan', diambil pandas dari nama index DataFrame.
Mari kita bedah baris-baris kuncinya:
- Baris 1 dan 3 (
import matplotlib,matplotlib.use("Agg")): backendAggdiaktifkan sebelum modul lain dipakai, sehingga Matplotlib merender gambar ke memori tanpa membuka jendela tampilan. Pola ini penting pada lingkungan tanpa layar seperti server. - Baris 8-15 (pembuatan
penjualan): DataFrame tiga kolom dibuat dengan index nama bulan yang diberi nama"bulan". Nama index inilah yang menjadi label sumbu x. - Baris 18 (
ax = penjualan.plot.line()): pandas menggambar satu garis untuk setiap kolom numerik dan mengembalikan objekAxes. - Baris 25 (
ax.get_figure().savefig(...)): methodget_figure()naik dariAxeske objekFigureinduknya, lalusavefig()menuliskannya sebagai file PNG. Gambar tidak tercetak ke stdout, jadi skrip mencetak pesan konfirmasi sebagai bukti eksekusi. - Baris 28-30 (pemanggilan
plot(kind="bar")): bentuk pemanggilan alternatif yang setara — parameterkindmenerima nama jenis grafik sebagai string.
Peta Jenis Grafik .plot #
Accessor .plot menyediakan satu method untuk setiap jenis grafik, dan semuanya juga bisa dipanggil lewat parameter kind:
| Method | kind= | Pertanyaan yang dijawab |
|---|---|---|
.plot.line() | "line" | Bagaimana tren nilai sepanjang sumbu x? |
.plot.bar() / .plot.barh() | "bar" / "barh" | Bagaimana perbandingan nilai antarkategori? |
.plot.hist() | "hist" | Bagaimana sebaran nilai satu kolom? |
.plot.box() | "box" | Bagaimana ringkasan distribusi dan outliernya? |
.plot.scatter() | "scatter" | Bagaimana hubungan dua kolom numerik? |
.plot.area() | "area" | Bagaimana besaran bertumpuk sepanjang waktu? |
.plot.pie() | "pie" | Bagaimana proporsi tiap bagian dari total? |
Dokumentasi resmi user guide visualization
memetakan seluruh jenis grafik ini, dan pandas.DataFrame.plot
merinci parameter yang berlaku untuk semuanya. Sementara matplotlib.org/stable
menjadi rujukan untuk sisi Matplotlib itu sendiri. Dengan fondasi .plot ini, chapter berikutnya membahas jenis grafik yang paling sering dipakai untuk data berurutan: line plot.