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.

python
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:

text
       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              : 3

Output 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:

  1. Baris 1 dan 3 (import matplotlib, matplotlib.use("Agg")): backend Agg diaktifkan sebelum modul lain dipakai, sehingga Matplotlib merender gambar ke memori tanpa membuka jendela tampilan. Pola ini penting pada lingkungan tanpa layar seperti server.
  2. 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.
  3. Baris 18 (ax = penjualan.plot.line()): pandas menggambar satu garis untuk setiap kolom numerik dan mengembalikan objek Axes.
  4. Baris 25 (ax.get_figure().savefig(...)): method get_figure() naik dari Axes ke objek Figure induknya, lalu savefig() menuliskannya sebagai file PNG. Gambar tidak tercetak ke stdout, jadi skrip mencetak pesan konfirmasi sebagai bukti eksekusi.
  5. Baris 28-30 (pemanggilan plot(kind="bar")): bentuk pemanggilan alternatif yang setara — parameter kind menerima 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:

Methodkind=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.