Skip to main content

Visualisasi Data dari Pandas - 5

Pyplot vs Object-Oriented Method dengan Pandas dan Matplotlib

Matplotlib menyediakan beberapa cara untuk membuat visualisasi data.

Dua pendekatan yang penting untuk dipahami adalah:

  1. Pyplot Method
  2. Object-Oriented (OO) Method

Keduanya dapat digunakan untuk membuat visualisasi yang sama, tetapi cara mengelola grafik dan tingkat kontrol yang diberikan berbeda.

Dalam workflow Data Science, pendekatan Pyplot sering digunakan untuk eksplorasi cepat, sedangkan Object-Oriented Method sangat berguna ketika kita membutuhkan kontrol lebih besar terhadap Figure dan Axes.


Mengapa Perlu Memahami Dua Pendekatan?

Ketika pertama kali belajar Matplotlib, kita biasanya menemukan kode seperti:

plt.plot(x, y)

Pendekatan tersebut menggunakan interface pyplot.

Ketika kebutuhan visualisasi menjadi lebih kompleks, kita dapat menggunakan:

fig, ax = plt.subplots()

ax.plot(x, y)

Pendekatan kedua secara eksplisit bekerja dengan objek:

Figure

Axes

Plot

Memahami perbedaan ini akan membantu kita menulis kode visualisasi yang lebih terstruktur.


Gambaran Umum

Secara sederhana:

Pyplot

Cepat dan sederhana

Quick Visualization

Sedangkan:

Object-Oriented

Figure + Axes

Kontrol lebih besar

Complex Visualization

Keduanya bukan dua library yang berbeda.

Keduanya merupakan interface yang tersedia dalam Matplotlib.


Pyplot Method

Pyplot merupakan interface Matplotlib yang menyediakan berbagai fungsi untuk membuat dan mengatur visualisasi.

Biasanya kita menggunakannya melalui:

import matplotlib.pyplot as plt

Contoh sederhana:

plt.plot(
x,
y
)

plt.show()

Dengan pendekatan ini, kita tidak perlu secara eksplisit membuat objek Axes terlebih dahulu.


Contoh Pyplot Sederhana

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

plt.plot(x, y)

plt.show()

Matplotlib akan membuat Figure dan Axes yang diperlukan secara otomatis melalui state internal pyplot.

Pendekatan ini sangat praktis untuk visualisasi sederhana.


Pyplot dengan Pandas

Pandas juga menyediakan interface .plot() yang menggunakan Matplotlib sebagai backend.

Misalnya kita memiliki DataFrame:

over_50

Kita dapat membuat scatter plot:

over_50.plot(
kind="scatter",
x="age",
y="chol"
)

Kemudian:

plt.show()

Pandas menangani pembuatan plot dan menggunakan Matplotlib di belakangnya.


Contoh Pyplot dengan Dataset

Misalnya kita ingin melihat hubungan antara:

  • age;
  • chol;
  • target.

Pada dataset:

agesexcptrestbpscholfbsrestecgthalachexangoldpeakslopecathaltarget
63131452331015002.30011
37121302500118703.50021
41011302040017201.42021
56111202360117800.82021
57001203540116310.62021

Kita dapat menulis:

over_50 = heart_disease[heart_disease["age"] > 50]

over_50.plot(
kind="scatter",
x="age",
y="chol",
c="target"
)

plt.show()

matplotlib

Parameter:

x="age"

digunakan untuk menentukan kolom sumbu X.

y="chol"

digunakan untuk menentukan kolom sumbu Y.

Sedangkan:

c="target"

digunakan untuk menentukan nilai yang digunakan sebagai warna titik.


Kelebihan Pyplot

Pyplot memiliki beberapa kelebihan.

Kode Ringkas

Untuk grafik sederhana, kode yang diperlukan relatif sedikit.

Contoh:

plt.plot(x, y)

plt.show()

Cocok untuk Eksplorasi Cepat

Ketika melakukan EDA, kita sering hanya ingin menjawab pertanyaan sederhana:

Bagaimana distribusi data?

Apakah ada hubungan antar variabel?

Bagaimana tren data?

Apakah ada nilai ekstrem?

Untuk kebutuhan seperti ini, pyplot dapat sangat praktis.


Mudah Dipelajari

Bagi pemula, fungsi seperti:

plt.plot()
plt.scatter()
plt.bar()
plt.hist()

cukup mudah dipahami.


Kekurangan Pyplot

Ketika visualisasi menjadi kompleks, pendekatan state-based pyplot dapat menjadi lebih sulit dikelola.

Misalnya ketika kita memiliki:

  • banyak subplot;
  • banyak Figure;
  • banyak Axes;
  • customization yang kompleks;
  • visualisasi yang perlu dipelihara dalam kode yang lebih besar.

Dalam kondisi seperti ini, Object-Oriented Method biasanya memberikan struktur yang lebih jelas.


Object-Oriented Method

Object-Oriented Method menggunakan objek Matplotlib secara eksplisit.

Pola dasarnya:

fig, ax = plt.subplots()

Kemudian kita menggunakan ax untuk membuat plot:

ax.plot(x, y)

Terakhir:

plt.show()

atau:

fig.show()

Dalam praktik Matplotlib, plt.show() umum digunakan untuk menampilkan Figure.


Memahami Figure dan Axes

Object-Oriented Method sangat erat dengan dua konsep:

Figure

└── Axes

├── Plot
├── X Axis
├── Y Axis
├── Title
├── Labels
└── Legend

Figure

Figure merupakan keseluruhan container atau canvas tempat visualisasi berada.

Contoh:

fig

Axes

Axes merupakan area tempat kita benar-benar membuat plot.

Contoh:

ax

Jadi:

fig, ax = plt.subplots()

menghasilkan:

Figure

└── Axes

Contoh Object-Oriented Method

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

fig, ax = plt.subplots()

ax.plot(x, y)

plt.show()

Perbedaan utamanya adalah kita secara eksplisit bekerja dengan objek Axes.


Membuat Scatter Plot dengan OO Method

Kita dapat menggabungkan Pandas dengan Object-Oriented Matplotlib.

fig, ax = plt.subplots(
figsize=(10, 6)
)

over_50.plot(
kind="scatter",
x="age",
y="chol",
c="target",
ax=ax
)

plt.show()

matplotlib

Parameter pentingnya adalah:

ax=ax

Parameter tersebut memberitahu Pandas:

Gunakan Axes yang sudah kita buat.


Mengapa ax=ax Penting?

Perhatikan:

fig, ax = plt.subplots()

Kita telah membuat sebuah Axes.

Kemudian:

over_50.plot(
kind="scatter",
x="age",
y="chol",
ax=ax
)

Pandas memasukkan plot ke Axes tersebut.

Secara konsep:

plt.subplots()

Figure + Axes

ax

Pandas .plot(ax=ax)

Plot berada pada Axes tersebut

Hal ini membuat kita dapat mengontrol Axes secara langsung.


Customization dengan OO Method

Salah satu keuntungan utama OO Method adalah kemampuan melakukan customization terhadap objek Axes.

Contohnya mengatur batas sumbu X:

ax.set_xlim(
[45, 100]
)

Contoh lengkap:

fig, ax = plt.subplots(
figsize=(10, 6)
)

over_50.plot(
kind="scatter",
x="age",
y="chol",
c="target",
ax=ax
)

ax.set_xlim(
[45, 100]
)

plt.show()

Mengatur Batas Sumbu Y

Selain X, kita juga dapat mengatur batas Y:

ax.set_ylim(
[100, 400]
)

Contoh:

fig, ax = plt.subplots(
figsize=(10, 6)
)

over_50.plot(
kind="scatter",
x="age",
y="chol",
c="target",
ax=ax
)

ax.set_xlim(
[45, 100]
)

ax.set_ylim(
[100, 400]
)

plt.show()

Dengan cara ini, kita memiliki kontrol terhadap area data yang ingin ditampilkan.


Mengatur Judul

OO Method juga memungkinkan kita mengatur judul menggunakan:

ax.set_title()

Contoh:

ax.set_title(
"Age vs Cholesterol"
)

Mengatur Label Sumbu

Label sumbu X:

ax.set_xlabel(
"Age"
)

Label sumbu Y:

ax.set_ylabel(
"Cholesterol"
)

Contoh lengkap:

fig, ax = plt.subplots(
figsize=(10, 6)
)

over_50.plot(
kind="scatter",
x="age",
y="chol",
c="target",
ax=ax
)

ax.set_title(
"Age vs Cholesterol"
)

ax.set_xlabel(
"Age"
)

ax.set_ylabel(
"Cholesterol"
)

plt.show()

Menggunakan ax.set()

Matplotlib juga menyediakan method:

ax.set()

untuk mengatur beberapa properti sekaligus.

Contoh:

ax.set(
title="Age vs Cholesterol",
xlabel="Age",
ylabel="Cholesterol"
)

Sehingga kode dapat menjadi lebih ringkas.


Membuat Banyak Subplot dengan OO Method

Object-Oriented Method sangat berguna ketika kita memiliki banyak subplot.

Contoh:

fig, ax = plt.subplots(
nrows=2,
ncols=2,
figsize=(10, 8)
)

Kita akan mendapatkan:

ax[0, 0] ax[0, 1]

ax[1, 0] ax[1, 1]

Kemudian setiap Axes dapat digunakan secara individual.

Contoh:

ax[0, 0].plot(x, y)

ax[0, 1].scatter(x, y)

ax[1, 0].bar(
categories,
values
)

ax[1, 1].hist(
data
)

Keuntungan OO untuk Multi-Plot

Dengan OO Method, kita dapat mengontrol setiap subplot secara individual.

Misalnya:

ax[0, 0].set_title("Line Plot")
ax[0, 1].set_title("Scatter Plot")
ax[1, 0].set_title("Bar Plot")
ax[1, 1].set_title("Histogram")

Kita juga dapat memberikan batas sumbu yang berbeda:

ax[0, 0].set_xlim(...)
ax[0, 1].set_xlim(...)

Struktur kode menjadi lebih jelas ketika jumlah plot bertambah.


Pyplot vs Object-Oriented

Berikut gambaran sederhana.

Pyplot

plt.plot(
x,
y
)

plt.title(
"My Plot"
)

plt.xlabel(
"X"
)

plt.ylabel(
"Y"
)

plt.show()

Object-Oriented

fig, ax = plt.subplots()

ax.plot(
x,
y
)

ax.set_title(
"My Plot"
)

ax.set_xlabel(
"X"
)

ax.set_ylabel(
"Y"
)

plt.show()

Keduanya dapat menghasilkan visualisasi yang serupa.

Perbedaannya terdapat pada bagaimana kita mengelola objek visualisasi.


Perbandingan Konsep

KonsepPyplotObject-Oriented
Membuat plotplt.plot()ax.plot()
Membuat scatterplt.scatter()ax.scatter()
Membuat barplt.bar()ax.bar()
Membuat histogramplt.hist()ax.hist()
Judulplt.title()ax.set_title()
Label Xplt.xlabel()ax.set_xlabel()
Label Yplt.ylabel()ax.set_ylabel()
Batas Xplt.xlim()ax.set_xlim()
Batas Yplt.ylim()ax.set_ylim()
Kontrol AxesTidak eksplisitEksplisit

Pyplot Bukan Berarti "Salah"

Penting untuk dipahami bahwa menggunakan pyplot bukan berarti kode kita salah.

Contoh:

plt.plot(x, y)

merupakan cara yang valid untuk membuat visualisasi.

Pyplot sangat berguna untuk:

  • eksplorasi cepat;
  • notebook;
  • eksperimen;
  • grafik sederhana;
  • pembelajaran dasar Matplotlib.

Masalah biasanya muncul ketika struktur visualisasi menjadi lebih kompleks dan kita membutuhkan pengelolaan beberapa Axes secara eksplisit.


Object-Oriented Bukan Berarti Selalu Harus Panjang

Meskipun OO Method terlihat lebih panjang, struktur kode dapat menjadi lebih mudah dipelihara.

Contoh:

fig, ax = plt.subplots(
figsize=(10, 6)
)

ax.scatter(
x,
y
)

ax.set(
title="My Data",
xlabel="X",
ylabel="Y"
)

fig.tight_layout()

plt.show()

Struktur ini secara eksplisit menunjukkan:

Figure

Axes

Plot

Customization

Menggabungkan Pandas dan OO Matplotlib

Salah satu pola yang sangat berguna adalah menggabungkan Pandas .plot() dengan Matplotlib OO.

Contoh:

fig, ax = plt.subplots(
figsize=(10, 6)
)

over_50.plot(
kind="scatter",
x="age",
y="chol",
c="target",
ax=ax
)

ax.set(
title="Age vs Cholesterol",
xlabel="Age",
ylabel="Cholesterol"
)

fig.tight_layout()

plt.show()

Dengan pendekatan ini:

Pandas

Data Selection

Pandas .plot()

Matplotlib Axes

Customization

Ini merupakan pola yang sangat berguna dalam Data Science.


Kapan Menggunakan Pyplot?

Pyplot cocok digunakan ketika:

  • ingin membuat grafik sederhana;
  • melakukan eksplorasi data dengan cepat;
  • membuat prototipe visualisasi;
  • bekerja dengan satu atau sedikit plot;
  • tidak membutuhkan customization yang kompleks.

Contoh:

df["age"].plot.hist()

plt.show()

Kode tersebut sudah cukup untuk eksplorasi awal.


Kapan Menggunakan Object-Oriented Method?

OO Method sangat berguna ketika:

  • membuat beberapa subplot;
  • membutuhkan customization yang detail;
  • mengatur Figure dan Axes secara individual;
  • membuat visualisasi untuk laporan;
  • membuat grafik yang perlu dipelihara dalam project;
  • membutuhkan kontrol terhadap layout dan batas sumbu.

Contoh:

fig, ax = plt.subplots(
figsize=(10, 6)
)

df.plot(
x="age",
y="chol",
kind="scatter",
ax=ax
)

ax.set_xlim(
[45, 100]
)

plt.show()

Workflow Visualisasi

Kita dapat menggunakan workflow berikut:

Load Dataset

Pandas DataFrame

Exploratory Data Analysis

Simple Plot?

Yes ─────────→ Pandas / Pyplot

No

Complex Visualization

Object-Oriented Matplotlib

Figure + Axes

Customization

Final Visualization

Pendekatan ini membantu kita memilih interface berdasarkan kebutuhan, bukan hanya berdasarkan kebiasaan.


Best Practice untuk Belajar Matplotlib

Saat belajar, sebaiknya memahami keduanya.

Mulailah dengan pyplot:

plt.plot(x, y)

Kemudian pahami Object-Oriented:

fig, ax = plt.subplots()

ax.plot(x, y)

Dengan demikian kita memahami bahwa keduanya menggunakan Matplotlib tetapi memiliki cara pengelolaan objek yang berbeda.

Untuk visualisasi yang kompleks, biasakan memahami struktur:

Figure

Axes

Artists / Plot Elements

Kesalahan yang Sering Terjadi

Tidak Memahami Perbedaan Figure dan Axes

Jangan menganggap:

fig

dan:

ax

merupakan objek yang sama.

Figure adalah container keseluruhan, sedangkan Axes merupakan area plotting.


Lupa Mengirim ax

Ketika menggunakan Pandas bersama OO Matplotlib:

fig, ax = plt.subplots()

dan:

df.plot(...)

Pandas dapat membuat atau memilih Axes sendiri.

Jika ingin menggunakan Axes yang sudah dibuat, gunakan:

df.plot(
ax=ax
)

Menggunakan Pyplot untuk Struktur yang Sangat Kompleks

Kode seperti:

plt.title(...)
plt.xlabel(...)
plt.ylabel(...)
plt.xlim(...)
plt.ylim(...)

dapat menjadi sulit dikelola ketika terdapat banyak Axes.

Dalam kondisi tersebut, pendekatan:

ax.set_title(...)
ax.set_xlabel(...)
ax.set_ylabel(...)
ax.set_xlim(...)
ax.set_ylim(...)

lebih eksplisit karena setiap customization diarahkan ke Axes tertentu.


Ringkasan

Pada materi ini kita mempelajari dua pendekatan utama dalam Matplotlib:

Pyplot Method

Contoh:

plt.plot(
x,
y
)

Karakteristik:

  • sederhana;
  • cepat;
  • cocok untuk eksplorasi;
  • kode relatif ringkas.

Object-Oriented Method

Contoh:

fig, ax = plt.subplots()

ax.plot(
x,
y
)

Karakteristik:

  • Figure dan Axes dikelola secara eksplisit;
  • lebih terstruktur;
  • cocok untuk multi-subplot;
  • memberikan kontrol customization yang lebih besar.

Tabel Ringkasan

FiturPyplotObject-Oriented
Kemudahan awalMudahSedikit lebih kompleks
Kode sederhanaRingkasLebih eksplisit
Eksplorasi cepatCocokCocok
Multi-subplotBisaSangat cocok
CustomizationTersediaLebih terstruktur
Kontrol AxesTidak eksplisitEksplisit
Visualisasi kompleksBisa menjadi lebih sulit dikelolaLebih terstruktur
Cocok untuk project besarTergantung kebutuhanUmumnya lebih mudah dipelihara

Inti Materi

Pola Pyplot:

plt.plot(x, y)

Pola Object-Oriented:

fig, ax = plt.subplots()

ax.plot(x, y)

Pola Pandas + Object-Oriented:

fig, ax = plt.subplots()

df.plot(
x="age",
y="chol",
kind="scatter",
ax=ax
)

plt.show()

Konsep paling penting adalah memahami bahwa Pandas dapat membuat plot melalui Matplotlib, dan kita dapat memberikan Axes tertentu menggunakan parameter ax.

Dengan memahami Figure dan Axes, kita dapat beralih dari visualisasi sederhana menuju visualisasi yang lebih terstruktur dan kompleks.