Matplotlib Tutorial Bahasa Indonesia: 12 Grafik yang Paling Sering Dipakai
Blog/Tips & Trik/Matplotlib Tutorial Bahasa Indonesia: 12 Grafik yang Paling Sering Dipakai

Matplotlib Tutorial Bahasa Indonesia: 12 Grafik yang Paling Sering Dipakai

BimaBima
·19 September 2025·11 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

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

  1. 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.
  2. Numpuk grafik di figure yang sama. Kalau kamu lupa bikin fig, ax baru, plot berikutnya nempel di grafik sebelumnya.
  3. Label kepotong waktu disimpan. Tambahin bbox_inches="tight" di savefig.
  4. Sumbu Y bar chart nggak mulai dari nol. Ini bikin selisih kecil kelihatan dramatis.
  5. Angka rupiah tanpa format. Sumbu yang nulis 63400000 susah dibaca. Bagi dulu ke juta dan tulis satuannya di label.
  6. 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.

Coba Langsung

Mau praktek langsung? Mulai latihan SQL gratis

Latihan interaktif, langsung di browser.

Buka NgulikSQL →
Bagikan:
Bima
Ditulis oleh

Bima

Founder & Data Professional

Founder Ngulik Data. Passionate about making data analysis accessible for everyone.

Artikel terkait

Pandas groupby: Agregasi Data ala Pivot di Python (2026)
Tips & Trik
20 Juli 2026•9 menit baca

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.

BimaBima
Pandas to_excel: Ekspor DataFrame ke Excel (2026)
Tips & Trik
18 Juli 2026•8 menit baca

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.

BimaBima
Pandas read_excel: Baca File Excel di Python
Tips & Trik
16 Juli 2026•8 menit baca

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.

BimaBima
Kembali ke Blog
Ngulik Data logoNgulik Data

Platform edukasi data lengkap untuk professionals Indonesia. Belajar SQL, Data Analysis, dan lebih banyak lagi dengan praktek langsung dan feedback real-time.

© 2026 Ngulik Data. Semua hak dilindungi.

TAUTAN
BantuanHargaDatasetBlogAfiliasi
LEGAL
Syarat & KetentuanKebijakan Privasi
Ngulik Data
DatasetLeaderboardBlogStore