Pembuatan grafik di matplotlib dan seaborn mengikuti pola yang sama pada setiap kasus, yaitu menyiapkan figur, mengisi data, menuliskan label, lalu menyimpan gambar. Topik ini membahas pola inti tersebut melalui contoh bertingkat, dimulai dari grafik batang sederhana, dilanjutkan grafik garis tren, dan ditutup dengan padanan yang lebih ringkas di seaborn. Setelah membaca topik ini, grafik dasar dapat dibuat ulang dari nol dengan langkah yang selalu sama.
Pola dasar matplotlib#
matplotlib memisahkan dua objek utama dalam setiap gambar, yaitu figure sebagai kanvas keseluruhan dan axes sebagai area gambar yang memuat sumbu, judul, serta data. Fungsi plt.subplots() membuat kedua objek itu sekaligus dan mengembalikannya sebagai sepasang variabel. Konvensi penamaannya sudah baku, yaitu fig untuk figure dan ax untuk axes. Pengaturan sumbu, label, dan judul dilakukan terhadap ax, sedangkan penyimpanan berkas gambar dilakukan melalui pyplot.
Langkah pembuatan grafik berulang di setiap kasus dan selalu dimulai dari persiapan yang sama. Lingkungan tanpa layar, termasuk server eksekusi skrip, membutuhkan matplotlib.use("Agg") yang dipanggil sebelum pyplot diimpor. Setelah persiapan itu, prosedurnya berupa empat langkah berurutan.
- Buat
figdanaxdenganplt.subplots(). - Gambar data ke
ax, misalnyaax.bar()untuk grafik batang. - Tulis label dengan
ax.set_xlabel(),ax.set_ylabel(), danax.set_title(). - Simpan gambar dengan
plt.savefig()beserta kepadatan titik yang diinginkan, misalnyadpi=120.
Berkas grafik-batang.py berikut memuat contoh lengkapnya. Data berupa nilai rata-rata ujian matematika untuk tiga kelas, dan gambar hasilnya disimpan sebagai batang-nilai-kelas.png di direktori yang sama dengan skripnya.
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
kelas = ["7A", "7B", "7C"]
nilai_rata = [78, 84, 81]
fig, ax = plt.subplots()
ax.bar(kelas, nilai_rata)
ax.set_xlabel("Kelas")
ax.set_ylabel("Nilai rata-rata")
ax.set_title("Nilai rata-rata ujian matematika per kelas")
plt.savefig("batang-nilai-kelas.png", dpi=120)
print("Grafik tersimpan: batang-nilai-kelas.png")Grafik tersimpan: batang-nilai-kelas.png
Gambar di atas merupakan hasil dari skrip tersebut. Ketiga batang terbaca nilainya dari sumbu vertikal, dan labelnya menjelaskan besaran serta kelompok data yang dibandingkan. Grafik sederhana seperti ini sudah memenuhi syarat teknis penyajian, yaitu ada data, ada label, dan ada judul, sehingga pembaca tidak perlu menebak isi gambar.
Grafik garis untuk tren waktu#
Grafik garis dibuat dengan pola yang persis sama, dan hanya fungsi penggambar beserta datanya yang berubah. Fungsi ax.plot() menghubungkan titik-titik data dengan garis, sedangkan parameter marker="o" menambahkan tanda titik pada setiap data sehingga perubahan antarbulan tetap terbaca. Data yang digunakan berupa jumlah peminjaman buku perpustakaan selama enam bulan, dari Januari sampai Juni.
Berkas grafik-garis.py berikut menerapkan keempat langkah yang sama pada data peminjaman tersebut.
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
bulan = ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun"]
peminjaman = [312, 289, 347, 402, 386, 441]
fig, ax = plt.subplots()
ax.plot(bulan, peminjaman, marker="o")
ax.set_xlabel("Bulan")
ax.set_ylabel("Jumlah peminjaman")
ax.set_title("Peminjaman buku per bulan, Januari sampai Juni")
plt.savefig("garis-peminjaman.png", dpi=120)
print("Grafik tersimpan: garis-peminjaman.png")Grafik tersimpan: garis-peminjaman.png
Kenaikan dan penurunan peminjaman kini terbaca sebagai arah garis. Titik terendah terjadi pada Februari, sedangkan titik tertinggi terjadi pada Juni. Dari sisi kode, perbedaan dengan contoh batang hanya berada pada satu baris, yaitu penggantian ax.bar() dengan ax.plot(). Kesamaan langkah inilah yang membuat pembuatan grafik matplotlib tidak perlu dipelajari ulang dari awal untuk setiap jenis grafik baru.
Padanan cepat dengan seaborn#
seaborn bekerja sebagai lapisan di atas matplotlib dan menyediakan fungsi yang namanya mengikuti jenis grafiknya, misalnya sns.barplot() untuk grafik batang. Data berbentuk tabel pandas diserahkan langsung melalui parameter data, lalu kolomnya ditunjuk melalui parameter x dan y. Dengan cara ini, pembuatan grafik tidak lagi memerlukan deret terpisah untuk setiap sumbu, dan tabel yang sama dapat digunakan kembali untuk beberapa grafik.
Berkas grafik-seaborn.py berikut menggambar data nilai ujian yang sama dengan contoh batang pertama, kali ini melalui seaborn. Argumen ax=ax menempatkan hasilnya pada axes yang sudah dibuat, sehingga label dan judul tetap diatur dengan cara matplotlib.
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
df = pd.DataFrame({
"kelas": ["7A", "7B", "7C"],
"nilai_rata": [78, 84, 81],
})
fig, ax = plt.subplots()
sns.barplot(data=df, x="kelas", y="nilai_rata", ax=ax)
ax.set_xlabel("Kelas")
ax.set_ylabel("Nilai rata-rata")
ax.set_title("Nilai rata-rata ujian matematika per kelas")
plt.savefig("batang-seaborn.png", dpi=120)
print("Grafik tersimpan: batang-seaborn.png")Grafik tersimpan: batang-seaborn.png
Hasil akhirnya menyerupai versi matplotlib, tetapi jumlah baris kodenya lebih pendek. seaborn juga menghitung agregasi secara otomatis ketika satu kategori memiliki lebih dari satu nilai, misalnya rata-rata untuk setiap kelas. Kontrol halus seperti rentang sumbu khusus dan posisi anotasi tetap dijalankan melalui matplotlib, sehingga pemahaman pada bagian Pola dasar matplotlib tetap digunakan penuh.
Kesalahan umum#
Tiga kesalahan berikut paling sering muncul saat pola ini dipraktikkan pertama kali, beserta penyebab dan perbaikannya.
plt.show()dipanggil di lingkungan tanpa layar. Perintah tersebut mencoba menampilkan jendela yang tidak tersedia, sehingga matplotlib menampilkan peringatan dan program tidak menghasilkan berkas apa pun. Perbaikannya, gantiplt.show()denganplt.savefig().matplotlib.use("Agg")dipanggil setelah pyplot diimpor. Urutan ini dapat membuat backend tidak sempat berganti dan program tetap mencoba membuka jendela yang tidak ada. Perbaikannya, panggilmatplotlib.use()pada baris pertama sebelumimport matplotlib.pyplot.plt.savefig()dilupakan atau dipanggil terlalu dini. Figur hanya hidup selama program berjalan, sehingga tanpa penyimpanan tidak ada berkas yang tersisa, sedangkan penyimpanan yang terlalu dini menghasilkan gambar tanpa label. Perbaikannya, letakkanplt.savefig()di akhir skrip, tepat sebelum pernyataanprintkonfirmasi.
Ringkasan#
fig, ax = plt.subplots()membuat figure dan axes, laluax.bar()atauax.plot()mengisi datanya.- Label ditulis dengan
ax.set_xlabel(),ax.set_ylabel(), danax.set_title(), sedangkan gambar disimpan denganplt.savefig("nama-berkas.png", dpi=120). matplotlib.use("Agg")dipanggil sebelum pyplot diimpor pada lingkungan tanpa layar, danplt.savefig()menggantikanplt.show().- seaborn memangkas kode untuk grafik standar dari tabel pandas dan tetap bekerja di atas matplotlib.
Referensi#
- Matplotlib Documentation — Matplotlib — Dokumentasi resmi matplotlib yang mencakup antarmuka pyplot, objek Axes, dan penyimpanan gambar.
- seaborn: statistical data visualization — seaborn — Dokumentasi resmi seaborn, termasuk fungsi grafik berbasis tabel pandas dan parameternya.