Matplotlib Tutorial Bahasa Indonesia: 12 Grafik yang Paling Sering Dipakai
TL;DR
Matplotlib adalah library visualisasi data Python yang dipakai buat bikin grafik statis kayak line chart, bar chart, histogram, sampai boxplot. Cara pakainya lewat dua gaya: pyplot yang ringkas buat grafik cepat, dan gaya object-oriented pakai fig dan ax yang lebih rapi buat grafik bertingkat. Dari ratusan fungsi yang ada, 12 jenis grafik sudah cukup buat mayoritas kerjaan analis data harian.
Matplotlib adalah library Python buat bikin grafik statis, mulai dari line chart sederhana sampai panel grafik bertingkat yang siap masuk laporan.
Library ini udah ada sejak 2003 dan masih jadi dasar dari hampir semua tool visualisasi Python lain, termasuk pandas dan Seaborn.
Masalahnya, dokumentasinya luas banget. Ada ratusan fungsi, dan pemula gampang tenggelam di situ. Padahal kerjaan analis harian cuma butuh belasan pola yang sama, berulang-ulang.
Di bawah ini 12 grafik yang paling sering aku pakai, lengkap kodenya, plus catatan kapan grafik itu cocok dan kapan lebih baik ganti.
Apa itu Matplotlib dan kenapa masih dipakai?
Matplotlib adalah library visualisasi data Python yang ngubah angka jadi gambar grafik. Kamu kasih data dalam bentuk list, array, atau kolom DataFrame, lalu Matplotlib gambar sumbu, garis, batang, dan labelnya. Hasilnya bisa disimpan jadi PNG, SVG, atau PDF buat laporan.
Alasan dia masih dipakai setelah dua dekade: kontrolnya detail sampai level piksel. Mau geser posisi legenda 3 milimeter? Bisa. Mau ganti font satu label doang? Bisa.
Tool lain lebih cepat buat grafik standar, tapi begitu ada permintaan aneh dari atasan, Matplotlib yang bisa nurut.
Gimana cara install Matplotlib?
Install lewat pip dari terminal. Satu baris, dan sebaiknya dijalankan di dalam virtual environment biar versi library-nya nggak tabrakan sama proyek lain.
pip install matplotlib pandas
Aku selalu install pandas barengan, soalnya data yang mau digambar hampir selalu datang dari DataFrame. Kalau kamu belum kenal cara misahin environment per proyek, baca dulu panduan virtual environment Python untuk analis.
Setelah itu, impor modul pyplot dengan alias standar:
import matplotlib.pyplot as plt
import pandas as pd
print(plt.matplotlib.__version__)
Apa bedanya pyplot dan gaya object-oriented?
Ada dua cara nulis kode Matplotlib. Gaya pyplot manggil perintah langsung ke plt, cocok buat grafik cepat sekali pakai. Gaya object-oriented bikin objek fig dan ax dulu, lalu semua perintah ditempel ke ax. Gaya kedua lebih panjang tapi jauh lebih rapi begitu grafikmu punya lebih dari satu panel.
# Gaya pyplot
plt.plot([1, 2, 3], [10, 20, 15])
plt.title("Cepat")
plt.show()
# Gaya object-oriented
fig, ax = plt.subplots(figsize=(8, 4))
ax.plot([1, 2, 3], [10, 20, 15])
ax.set_title("Rapi")
plt.show()
Saran aku: pakai gaya kedua sejak awal. Dokumentasi resmi Matplotlib juga merekomendasikan gaya object-oriented buat kode yang bakal dipakai ulang.
Apa saja 12 grafik Matplotlib yang paling sering dipakai?
Dua belas grafik ini nutup mayoritas kebutuhan laporan: tren waktu, perbandingan kategori, sebaran nilai, hubungan dua variabel, dan komposisi. Semua contoh di bawah pakai data penjualan toko_berkah, dataset latihan ngulikdata berisi transaksi ritel harian.
data = pd.DataFrame({
"bulan": ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun"],
"omzet": [42_500_000, 38_900_000, 51_200_000, 47_800_000, 63_400_000, 58_100_000],
"transaksi": [612, 548, 703, 661, 845, 792],
})
1. Line chart buat tren waktu
fig, ax = plt.subplots(figsize=(8, 4))
ax.plot(data["bulan"], data["omzet"], marker="o", color="#0891b2")
ax.set_title("Omzet toko_berkah per bulan")
ax.set_ylabel("Rupiah")
plt.show()
Pakai marker="o" kalau titik datanya sedikit. Di bawah 12 titik, penanda bulat bikin pembaca gampang baca nilai per periode.
2. Bar chart vertikal buat perbandingan kategori
ax.bar(data["bulan"], data["omzet"], color="#0891b2")
Bar chart wajib mulai dari nol. Kalau sumbu Y dipotong, selisih batang jadi kelihatan lebih besar dari kenyataan.
3. Bar chart horizontal buat label panjang
produk = ["Beras 5kg", "Minyak goreng 2L", "Gula pasir 1kg", "Telur 1kg"]
terjual = [1240, 980, 870, 1510]
fig, ax = plt.subplots(figsize=(8, 4))
ax.barh(produk, terjual, color="#f97316")
ax.set_xlabel("Unit terjual")
plt.show()
Begitu nama kategorinya lebih dari 10 huruf, ganti ke barh. Label miring 45 derajat itu bikin pembaca miringin kepala.
4. Grouped bar buat bandingin dua periode
import numpy as np
x = np.arange(len(data))
lebar = 0.38
fig, ax = plt.subplots(figsize=(9, 4))
ax.bar(x - lebar/2, data["omzet"]/1e6, lebar, label="2025", color="#0891b2")
ax.bar(x + lebar/2, data["omzet"]/1e6 * 0.82, lebar, label="2024", color="#fbbf24")
ax.set_xticks(x, data["bulan"])
ax.legend()
plt.show()
5. Stacked bar buat komposisi per periode
ax.bar(data["bulan"], sembako, label="Sembako", color="#0891b2")
ax.bar(data["bulan"], nonsembako, bottom=sembako, label="Non sembako", color="#f97316")
Kuncinya parameter bottom. Batang kedua ditumpuk di atas yang pertama.
6. Pie chart buat proporsi (pakai hemat)
ax.pie([48, 27, 15, 10],
labels=["Sembako", "Minuman", "Snack", "Lainnya"],
autopct="%1.0f%%")
Pie cuma enak dibaca kalau potongannya maksimal 4 dan selisihnya jelas. Lima potongan ke atas, ganti ke bar chart.
7. Histogram buat sebaran nilai
ax.hist(nilai_transaksi, bins=30, color="#0891b2", edgecolor="white")
ax.set_xlabel("Nilai transaksi (Rp)")
Jumlah bins ngubah cerita. Coba 20, 30, dan 50 sebelum ambil kesimpulan soal bentuk sebarannya.
8. Scatter plot buat hubungan dua variabel
ax.scatter(data["transaksi"], data["omzet"]/1e6,
s=70, alpha=0.7, color="#f97316")
Parameter alpha bikin titik semi transparan. Berguna kalau titiknya ratusan dan saling numpuk.
9. Boxplot buat lihat outlier
ax.boxplot([cabang_a, cabang_b, cabang_c],
tick_labels=["Depok", "Bekasi", "Bogor"])
Titik di luar garis kumis itu kandidat outlier. Cek dulu sebelum dibuang, kadang itu transaksi grosir yang beneran terjadi.
10. Area chart buat volume kumulatif
ax.fill_between(data["bulan"], data["omzet"]/1e6,
alpha=0.35, color="#0891b2")
ax.plot(data["bulan"], data["omzet"]/1e6, color="#0891b2")
11. Subplot grid buat banding banyak cabang
fig, axes = plt.subplots(2, 2, figsize=(10, 6), sharey=True)
for ax, (nama, df) in zip(axes.flat, cabang.items()):
ax.plot(df["bulan"], df["omzet"], color="#0891b2")
ax.set_title(nama)
fig.tight_layout()
Parameter sharey bikin semua panel pakai skala Y yang sama. Tanpa itu, perbandingan antar panel jadi menyesatkan.
12. Dua sumbu Y dengan twinx
fig, ax1 = plt.subplots(figsize=(9, 4))
ax1.bar(data["bulan"], data["omzet"]/1e6, color="#0891b2")
ax1.set_ylabel("Omzet (juta Rp)")
ax2 = ax1.twinx()
ax2.plot(data["bulan"], data["transaksi"], color="#f97316", marker="o")
ax2.set_ylabel("Jumlah transaksi")
plt.show()
Pakai twinx cuma kalau dua metric itu memang saling menjelaskan. Dua sumbu berbeda gampang dipakai buat manipulasi kesan.
Contoh kasus: kenapa grafik omzet toko_berkah nyaris nutupin masalah
Dari dataset toko_berkah, omzet Juni tercatat Rp 58,1 juta, turun 8,4 persen dari puncak Mei di Rp 63,4 juta. Kalau cuma lihat line chart omzet, kesimpulannya penjualan melemah.
Aku gambar ulang pakai twinx, omzet jadi batang dan jumlah transaksi jadi garis. Transaksi Juni cuma turun 6,3 persen, dari 845 ke 792.
Artinya nilai belanja rata-rata per transaksi ikut turun tipis, dari Rp 75.030 ke Rp 73.359. Selisihnya cuma Rp 1.671 per struk, jadi masalah utamanya bukan harga, tapi jumlah orang yang datang.
Satu grafik tambahan ngubah rekomendasi dari "naikkan harga" jadi "kejar traffic pengunjung". Itu gunanya milih jenis grafik dengan sadar.
Kesalahan umum waktu pakai Matplotlib
- Lupa plt.show() atau malah panggil dua kali. Di script, tanpa show() jendela grafik nggak muncul. Di Jupyter, panggil show() berkali-kali bikin figure kosong nyempil.
- Numpuk grafik di figure yang sama. Kalau kamu lupa bikin fig, ax baru, plot berikutnya nempel di grafik sebelumnya.
- Label kepotong waktu disimpan. Tambahin bbox_inches="tight" di savefig.
- Sumbu Y bar chart nggak mulai dari nol. Ini bikin selisih kecil kelihatan dramatis.
- Angka rupiah tanpa format. Sumbu yang nulis 63400000 susah dibaca. Bagi dulu ke juta dan tulis satuannya di label.
- Warna default dipakai buat data kategorikal berurutan. Kalau kategorinya punya urutan, misalnya rating 1 sampai 5, pakai colormap berurutan kayak Blues.
FAQ
Matplotlib atau Seaborn, mana yang harus aku pelajari duluan?
Matplotlib dulu. Seaborn dibangun di atas Matplotlib, jadi tiap kali kamu mau ganti judul, ukuran font, atau warna, kamu tetap balik ke perintah Matplotlib. Kalau dasarnya paham, belajar Seaborn cuma butuh sore hari.
Kenapa grafikku nggak muncul waktu dijalankan dari file .py?
Karena kamu belum manggil plt.show(). Di Jupyter grafik muncul otomatis, tapi di script biasa Matplotlib nunggu perintah itu. Kalau jalan di server tanpa layar, pakai plt.savefig("grafik.png") buat simpan hasilnya jadi file.
Gimana cara bikin grafik yang tajam buat laporan?
Simpan pakai plt.savefig("grafik.png", dpi=300, bbox_inches="tight"). Angka 300 bikin gambar tajam pas dicetak. Buat dokumen yang sering di-zoom, simpan versi vektor pakai ekstensi .svg atau .pdf.
Berapa warna yang aman dalam satu grafik?
Maksimal 5 sampai 6 kategori. Lebih dari itu pembaca capek bolak-balik ke legenda. Kelompokkan kategori kecil jadi satu "Lainnya", atau pecah jadi panel kecil pakai plt.subplots.
Matplotlib bisa bikin grafik interaktif?
Terbatas. Di Jupyter ada mode widget buat zoom dan geser. Kalau kamu butuh grafik yang bisa diklik dan ditaruh di web, Plotly lebih cocok. Matplotlib paling kuat buat grafik statis di laporan PDF dan slide.
Langkah berikutnya
Tiga hal yang paling ngefek dari tutorial ini: pakai gaya fig dan ax sejak awal, pilih jenis grafik berdasarkan pertanyaan bisnisnya, dan selalu cek apakah sumbu Y-mu jujur.
Kalau datamu masih di file Excel, mulai dari cara baca file Excel di Python dulu, baru masuk ke grafik.
Buat yang lebih nyaman ngolah angka di spreadsheet sebelum masuk Python, latihan fungsi dasar kayak AVERAGE dan SUMIFS di NgulikSheet bisa mempercepat tahap persiapan datanya.
Coba ambil satu file penjualan yang kamu punya, gambar tiga grafik dari daftar di atas, dan lihat mana yang paling cepat jawab pertanyaan bosmu.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Artikel terkait
Pandas groupby: Agregasi Data ala Pivot di Python (2026)
groupby ngelompokin baris berdasarkan kolom, lalu ngitung ringkasan per grup kayak total atau rata-rata. Ini pivot-nya pandas.
Pandas to_excel: Ekspor DataFrame ke Excel (2026)
to_excel nyimpen DataFrame pandas jadi file Excel .xlsx. Ini cara pakainya, dari satu sheet sampai banyak sheet, plus setelan yang bikin hasilnya rapi.
Pandas read_excel: Baca File Excel di Python
pandas read_excel baca file Excel jadi DataFrame, bisa pilih sheet tertentu dan lompatin baris judul yang berantakan. Ini cara pakai plus parameter penting dengan contoh data toko.