Line plot unggul untuk menunjukkan tren, tetapi kurang adil ketika pertanyaan kita adalah “produk mana yang paling laku?” — mata kita harus menelusuri garis satu per satu. Bar plot menjawab pertanyaan perbandingan dengan tinggi batang yang berdampingan. Pada pandas, method .plot.bar() menggambar bar dari setiap kolom numerik, .plot.bar(stacked=True) menumpuknya, dan .plot.barh() memutar orientasinya menjadi horizontal. Chapter ini membahas ketiganya dengan dataset penjualan yang sama.
Struktur Bar Plot di Balik Layar #
Objek Axes hasil bar plot menyimpan bar dalam ax.containers — satu container untuk setiap kolom DataFrame. Struktur ini bisa kita periksa lewat kode, sehingga kita tahu persis apa yang digambar pandas tanpa menebak dari tampilan.
Bar Grup, Bar Bertumpuk, dan Bar Horizontal #
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("Total per produk:")
print(penjualan.sum())
ax = penjualan.plot.bar(figsize=(8, 4))
print("\nTipe objek :", type(ax).__name__)
print("Jumlah grup bar :", len(ax.containers))
print("Jumlah bar per grup :", len(ax.containers[0]))
print("Tinggi bar grup 1 :", [int(p.get_height()) for p in ax.containers[0]])
ax.get_figure().savefig("bar_penjualan.png", dpi=100)
print("\nPlot tersimpan sebagai bar_penjualan.png")
ax_stacked = penjualan.plot.bar(stacked=True)
print("\nstacked=True:")
print("Jumlah grup bar :", len(ax_stacked.containers))
print("Tinggi bar grup 1 :", [int(p.get_height()) for p in ax_stacked.containers[0]])
ax_barh = penjualan.plot.barh()
print("\nbarh:")
print("Tipe objek :", type(ax_barh).__name__)
print("Jumlah grup bar :", len(ax_barh.containers))
Path("bar_penjualan.png").unlink()Output yang Dihasilkan:
Total per produk:
Buku Tulis 2170
Pulpen 1360
Kertas HVS 1690
dtype: int64
Tipe objek : Axes
Jumlah grup bar : 3
Jumlah bar per grup : 6
Tinggi bar grup 1 : [320, 340, 310, 380, 400, 420]
Plot tersimpan sebagai bar_penjualan.png
stacked=True:
Jumlah grup bar : 3
Tinggi bar grup 1 : [320, 340, 310, 380, 400, 420]
barh:
Tipe objek : Axes
Jumlah grup bar : 3Pada pemanggilan pertama, len(ax.containers) bernilai 3 — satu container per kolom produk — dan setiap container berisi 6 bar, satu per bulan. Nilai tinggi bar grup pertama tercetak sebagai [320, 340, 310, 380, 400, 420], persis kolom Buku Tulis. Dengan stacked=True, ketiga container tetap ada, tetapi bar-nya ditumpuk dalam satu kolom posisi sehingga tinggi total per bulan menjadi jumlah ketiga produk. Pemanggilan barh menghasilkan struktur container yang sama, hanya arah bar-nya horizontal.
Mari kita bedah baris-baris kuncinya:
- Baris 16-17 (
penjualan.sum()): total per produk dicetak sebagai pembanding — Buku Tulis 2170, Kertas HVS 1690, Pulpen 1360 — angka yang nantinya terlihat pada panjang bar. - Baris 19 (
penjualan.plot.bar(figsize=(8, 4))): satu bar per kombinasi bulan dan produk, disusun berkelompok. Label bulan diputar 90 derajat secara bawaan agar tidak saling menumpuk. - Baris 22-23 (
len(ax.containers[0])danget_height()): container pertama mewakili kolom pertama; tinggi tiap bar membuktikan datanya benar-benar dari DataFrame. - Baris 28 (
penjualan.plot.bar(stacked=True)): bar ditumpuk sehingga bagian atas tumpukan Januari berada di 760 — total penjualan bulan itu. - Baris 33 (
penjualan.plot.barh()): versi horizontal yang nyaman ketika nama kategori panjang, karena label terbaca dari kiri ke kanan.
Tabel berikut merangkum kapan bentuk mana yang layak dipilih:
| Bentuk | Cocok untuk | Perhatian |
|---|---|---|
plot.bar() | Membandingkan nilai antarkategori | Banyak kolom membuat grup ramai |
plot.bar(stacked=True) | Melihat komposisi dan total sekaligus | Nilai kolom kecil sulit dibaca sendirian |
plot.barh() | Nama kategori panjang, banyak kategori | Nilai dibaca pada sumbu horizontal |
Bar plot merangkum satu angka per kategori. Ketika kita ingin melihat seluruh sebaran nilai — berapa banyak hari penjualan jatuh di kisaran tertentu — satu bar per kategori tidak lagi cukup, dan histogram pada chapter berikutnya yang menjadi alatnya.
Dokumentasi pandas.DataFrame.plot.bar
dan pandas.DataFrame.plot.barh
merinci parameter stacked serta pengaturan bar lainnya, sementara user guide visualization
menampilkan contoh bar plot bertumpuk dengan data nyata.