Skip to main content

Visualisasi Data dari Pandas: Object-Oriented Matplotlib dari Awal

Pada materi sebelumnya kita telah mempelajari perbedaan antara Pyplot Method dan Object-Oriented (OO) Method pada Matplotlib.

Pada materi ini kita akan menggunakan pendekatan Object-Oriented secara lebih langsung, mulai dari:

  1. Membuat Figure dan Axes.
  2. Memasukkan data ke dalam Axes.
  3. Menambahkan judul dan label.
  4. Membuat legend.
  5. Menambahkan garis acuan.
  6. Melakukan customization pada visualisasi.

Pendekatan ini sangat berguna ketika kita ingin memiliki kontrol yang lebih jelas terhadap setiap komponen grafik.


Konsep Utama Object-Oriented Method​

Dalam Object-Oriented Method, kita bekerja secara eksplisit dengan objek:

Figure
│
└── Axes
│
├── Plot
├── Title
├── X Label
├── Y Label
├── Legend
└── Reference Line

Pola dasarnya adalah:

fig, ax = plt.subplots()

Kemudian seluruh elemen visualisasi diarahkan ke objek ax.

Contoh:

ax.scatter(...)
ax.set(...)
ax.legend(...)
ax.axhline(...)

Dataset yang Digunakan​

Pada contoh ini kita menggunakan dataset Heart Disease.

agesexcptrestbpscholfbsrestecgthalachexangoldpeakslopecathaltarget
63131452331015002.30011
37121302500118703.50021
41011302040017201.42021
56111202360117800.82021
57001203540116310.62021

Misalnya dataset sudah dimuat:

import pandas as pd

heart_disease = pd.read_csv(
"heart-disease.csv"
)

Kita dapat membuat subset data yang memiliki usia lebih dari 50 tahun:

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

Kemudian periksa data:

over_50.head()

Subset tersebut akan digunakan untuk membuat scatter plot.


Import Matplotlib​

Import Matplotlib:

import matplotlib.pyplot as plt

Sehingga setup awal dapat menjadi:

import pandas as pd
import matplotlib.pyplot as plt

heart_disease = pd.read_csv(
"heart-disease.csv"
)

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

Langkah 1 - Membuat Figure dan Axes​

Langkah pertama adalah membuat Figure dan Axes:

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

Kode tersebut menghasilkan dua objek:

fig → Figure
ax → Axes

Secara konseptual:

Figure
┌────────────────────────────────────┐
│ │
│ Axes │
│ │
│ │
│ │
└────────────────────────────────────┘

Memahami fig​

Variabel:

fig

merupakan objek Figure.

Figure adalah container atau wadah keseluruhan visualisasi.

Figure dapat berisi satu atau lebih Axes.

Contoh:

Figure
├── Axes 1
├── Axes 2
├── Axes 3
└── Axes 4

Ketika hanya membuat satu subplot:

fig, ax = plt.subplots()

maka Figure memiliki satu Axes.


Memahami ax​

Variabel:

ax

merupakan objek Axes.

Axes adalah area tempat kita membuat plot.

Contoh:

ax.scatter(...)

berarti membuat scatter plot pada Axes tersebut.

Dengan OO Method, kita tidak hanya memanggil fungsi global seperti:

plt.scatter(...)

tetapi secara eksplisit menentukan Axes:

ax.scatter(...)

Mengatur Ukuran Figure​

Ukuran Figure dapat diatur menggunakan:

figsize=(10, 6)

Contoh:

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

Nilai figsize menggunakan satuan inch.

Dalam contoh tersebut:

Lebar = 10 inch
Tinggi = 6 inch

Langkah 2 - Membuat Scatter Plot​

Setelah Figure dan Axes dibuat, kita dapat memasukkan data.

Gunakan:

scatter = ax.scatter(
x=over_50["age"],
y=over_50["chol"],
c=over_50["target"]
)

Pada kode tersebut:

x=over_50["age"]

menentukan data untuk sumbu X.

y=over_50["chol"]

menentukan data untuk sumbu Y.

Sedangkan:

c=over_50["target"]

digunakan untuk menentukan warna titik berdasarkan nilai target.


Memahami Variabel scatter​

Perhatikan bahwa hasil ax.scatter() disimpan ke:

scatter

Contoh:

scatter = ax.scatter(
x=over_50["age"],
y=over_50["chol"],
c=over_50["target"]
)

Objek tersebut berguna karena nantinya kita dapat mengambil informasi dari scatter plot untuk membuat legend.

Contohnya:

scatter.legend_elements()

Memahami Sumbu X​

Pada contoh:

x=over_50["age"]

kolom:

age

digunakan sebagai variabel X.

Artinya, posisi horizontal setiap titik menunjukkan nilai usia.


Memahami Sumbu Y​

Pada contoh:

y=over_50["chol"]

kolom:

chol

digunakan sebagai variabel Y.

Artinya, posisi vertikal setiap titik menunjukkan nilai kolesterol pada data yang digunakan.


Memahami Parameter c​

Parameter:

c=over_50["target"]

digunakan untuk menentukan warna titik berdasarkan nilai target.

Jika target memiliki beberapa kategori, warna titik dapat membantu membedakan kelompok tersebut secara visual.

Secara konseptual:

age
│
│ ●
│ ● ●
│ ● ●
│ ●
└──────────────── chol

Warna setiap titik berasal dari nilai pada kolom target.


Langkah 3 - Menambahkan Judul dan Label​

Setelah membuat scatter plot, kita dapat memberikan informasi tambahan menggunakan:

ax.set()

Contoh:

ax.set(
title="Heart Disease and Cholesterol Levels",
xlabel="Age",
ylabel="Cholesterol"
)

Kode tersebut mengatur:

  • judul grafik;
  • label sumbu X;
  • label sumbu Y.

matplotlib


Mengatur Judul​

Kita dapat mengatur judul menggunakan:

ax.set_title(
"Heart Disease and Cholesterol Levels"
)

Alternatif yang lebih ringkas:

ax.set(
title="Heart Disease and Cholesterol Levels"
)

Mengatur Label Sumbu X​

Gunakan:

ax.set_xlabel(
"Age"
)

atau melalui:

ax.set(
xlabel="Age"
)

Label tersebut membantu pembaca memahami bahwa sumbu X merepresentasikan usia.


Mengatur Label Sumbu Y​

Gunakan:

ax.set_ylabel(
"Cholesterol"
)

atau:

ax.set(
ylabel="Cholesterol"
)

Label ini menunjukkan bahwa sumbu Y merepresentasikan nilai kolesterol.


Menggunakan ax.set() Sekaligus​

Daripada menulis tiga perintah terpisah:

ax.set_title(...)
ax.set_xlabel(...)
ax.set_ylabel(...)

kita dapat menggunakan:

ax.set(
title="Heart Disease and Cholesterol Levels",
xlabel="Age",
ylabel="Cholesterol"
)

Pendekatan ini membuat customization dasar menjadi lebih ringkas.


Langkah 4 - Membuat Legend​

Karena warna titik ditentukan berdasarkan:

c=over_50["target"]

kita mungkin ingin memberikan keterangan mengenai kelompok warna tersebut.

Matplotlib menyediakan:

scatter.legend_elements()

untuk mengambil elemen legend berdasarkan scatter plot.

Contoh:

ax.legend(
*scatter.legend_elements(),
title="Target"
)

matplotlib


Memahami legend_elements()​

Perhatikan:

scatter.legend_elements()

Method tersebut menghasilkan elemen yang dapat digunakan untuk membuat legend.

Kemudian:

*

digunakan untuk melakukan argument unpacking terhadap hasil tersebut.

Sehingga:

ax.legend(
*scatter.legend_elements(),
title="Target"
)

memberikan elemen tersebut kepada ax.legend().


Menambahkan Judul pada Legend​

Parameter:

title="Target"

memberikan judul pada legend.

Sehingga secara konseptual:

Target
──────
● 0
● 1

Angka atau label yang muncul akan mengikuti nilai kategori yang digunakan pada kolom target.


Langkah 5 - Menambahkan Garis Acuan​

Kita juga dapat menambahkan garis horizontal menggunakan:

ax.axhline()

Misalnya kita ingin menampilkan nilai rata-rata kolesterol.

Pertama hitung mean:

over_50["chol"].mean()

Kemudian gunakan hasil tersebut:

ax.axhline(
over_50["chol"].mean(),
linestyle="--"
)

matplotlib


Memahami axhline()​

Method:

ax.axhline()

digunakan untuk membuat horizontal reference line.

Secara visual:

Cholesterol
│
│ ● ●
│ ●
────┼────────────────── ← Mean
│ ● ●
│
└────────────────── Age

Garis tersebut membantu memberikan titik referensi untuk membaca posisi data terhadap nilai rata-rata.


Memahami linestyle="--"​

Parameter:

linestyle="--"

menghasilkan garis putus-putus.

Contoh:

ax.axhline(
over_50["chol"].mean(),
linestyle="--"
)

Kita dapat menggunakan berbagai line style, misalnya:

"-" → garis solid
"--" → garis putus-putus
":" → garis titik-titik
"-." → kombinasi garis dan titik

Menghitung Mean​

Mean atau rata-rata dapat dihitung menggunakan:

over_50["chol"].mean()

Secara matematis:

Mean = jumlah seluruh nilai / jumlah observasi

Misalnya terdapat data:

180
200
220

maka:

Mean = (180 + 200 + 220) / 3
= 200

Dalam contoh dataset, nilai aktual mean akan bergantung pada data yang digunakan.


Contoh Lengkap OO Method​

Berikut implementasi lengkap dari awal:

import pandas as pd
import matplotlib.pyplot as plt

# Membaca dataset
heart_disease = pd.read_csv(
"heart-disease.csv"
)

# Mengambil data dengan age > 50
over_50 = heart_disease[
heart_disease["age"] > 50
]

# 1. Membuat Figure dan Axes
fig, ax = plt.subplots(
figsize=(10, 6)
)

# 2. Membuat scatter plot
scatter = ax.scatter(
x=over_50["age"],
y=over_50["chol"],
c=over_50["target"]
)

# 3. Menambahkan title dan label
ax.set(
title="Heart Disease and Cholesterol Levels",
xlabel="Age",
ylabel="Cholesterol"
)

# 4. Menambahkan legend
ax.legend(
*scatter.legend_elements(),
title="Target"
)

# 5. Menambahkan garis mean
ax.axhline(
over_50["chol"].mean(),
linestyle="--"
)

# Menampilkan grafik
plt.show()

matplotlib


Memahami Alur Kode​

Kode tersebut dapat dibagi menjadi lima tahap:

1. Setup
↓
Figure + Axes

2. Plot
↓
Scatter Plot

3. Labeling
↓
Title + X Label + Y Label

4. Legend
↓
Target Categories

5. Reference Line
↓
Mean Cholesterol

Struktur seperti ini membuat kode visualisasi lebih mudah dibaca.


Workflow Object-Oriented Matplotlib​

Secara umum, workflow OO Method dapat ditulis:

Create Figure
↓
Create Axes
↓
Plot Data
↓
Customize Axes
↓
Add Supporting Elements
↓
Adjust Layout
↓
Display / Save

Dalam kode:

fig, ax = plt.subplots()

ax.scatter(...)

ax.set(...)

ax.legend(...)

ax.axhline(...)

fig.tight_layout()

plt.show()

Menambahkan tight_layout()​

Jika grafik memiliki banyak elemen, kita dapat menggunakan:

fig.tight_layout()

Contoh:

fig.tight_layout()

plt.show()

Method ini membantu mengatur spacing antar elemen Figure agar tidak terlalu bertumpuk.


Menyimpan Grafik​

Selain menampilkan grafik, kita dapat menyimpannya sebagai file.

Gunakan:

fig.savefig(
"heart-disease-plot.png"
)

Contoh:

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

ax.scatter(
over_50["age"],
over_50["chol"],
c=over_50["target"]
)

ax.set(
title="Heart Disease and Cholesterol Levels",
xlabel="Age",
ylabel="Cholesterol"
)

fig.tight_layout()

fig.savefig(
"heart-disease-plot.png"
)

plt.show()

Pendekatan ini berguna ketika grafik akan digunakan untuk:

  • laporan;
  • dokumentasi;
  • presentasi;
  • artikel;
  • publikasi;
  • analisis lebih lanjut.

Mengatur Batas Sumbu​

OO Method juga memudahkan kita mengatur batas sumbu.

Contoh:

ax.set_xlim(
[45, 100]
)

Untuk sumbu Y:

ax.set_ylim(
[100, 400]
)

Contoh:

ax.set_xlim(
[45, 100]
)

ax.set_ylim(
[100, 400]
)

Pengaturan ini dapat membantu ketika kita ingin fokus pada area tertentu.

Namun, batas sumbu sebaiknya dipilih berdasarkan kebutuhan analisis dan tidak digunakan untuk menyembunyikan bagian data secara menyesatkan.


Menambahkan Beberapa Elemen pada Satu Axes​

Salah satu kekuatan OO Method adalah kita dapat menambahkan banyak elemen ke Axes yang sama.

Contohnya:

ax.scatter(...)

ax.axhline(...)

ax.set(...)

ax.legend(...)

Semuanya bekerja pada objek:

ax

Secara konseptual:

Figure
│
▼
Axes
│
┌─────────┼─────────┐
▼ ▼ ▼
Scatter Mean Legend
Plot Line

Mengapa Menyimpan Hasil scatter()?​

Kita dapat langsung menulis:

ax.scatter(
x=over_50["age"],
y=over_50["chol"],
c=over_50["target"]
)

Tetapi pada contoh ini kita menyimpan hasilnya:

scatter = ax.scatter(
x=over_50["age"],
y=over_50["chol"],
c=over_50["target"]
)

Alasannya adalah kita membutuhkan objek scatter untuk membuat legend:

scatter.legend_elements()

Jadi objek hasil plotting dapat digunakan kembali untuk customization berikutnya.


Pyplot vs OO pada Contoh Ini​

Pendekatan Pyplot​

Secara sederhana kita dapat menulis:

plt.scatter(
over_50["age"],
over_50["chol"],
c=over_50["target"]
)

plt.title(
"Heart Disease and Cholesterol Levels"
)

plt.xlabel(
"Age"
)

plt.ylabel(
"Cholesterol"
)

plt.show()

Pendekatan OO​

Dengan OO Method:

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

ax.scatter(
over_50["age"],
over_50["chol"],
c=over_50["target"]
)

ax.set(
title="Heart Disease and Cholesterol Levels",
xlabel="Age",
ylabel="Cholesterol"
)

plt.show()

Pada contoh OO, hubungan antara plot dan Axes terlihat secara eksplisit.


Keuntungan Pendekatan OO​

Object-Oriented Method memberikan beberapa keuntungan:

Kontrol terhadap Axes​

Kita dapat mengatur Axes tertentu:

ax.set_xlim(...)

Mudah untuk Multi-Plot​

Contoh:

fig, ax = plt.subplots(
2,
2
)

Kemudian:

ax[0, 0].scatter(...)
ax[0, 1].hist(...)
ax[1, 0].bar(...)
ax[1, 1].plot(...)

Struktur Kode Lebih Jelas​

Kode secara eksplisit menunjukkan:

Figure
↓
Axes
↓
Plot
↓
Customization

Mudah Dikembangkan​

Setelah memahami pola:

fig, ax = plt.subplots()

kita dapat menambahkan:

  • title;
  • labels;
  • legend;
  • grid;
  • reference line;
  • limits;
  • annotations;
  • multiple plots;
  • saving.

Kesalahan yang Sering Terjadi​

Lupa Membuat Figure dan Axes​

OO Method membutuhkan objek Axes.

Gunakan:

fig, ax = plt.subplots()

sebelum:

ax.scatter(...)

Menggunakan plt dan ax Secara Tidak Konsisten​

Contoh:

fig, ax = plt.subplots()

ax.scatter(...)

plt.title(...)

Kode tersebut dapat bekerja, tetapi jika tujuan kita adalah mempraktikkan OO Method secara konsisten, lebih baik customization diarahkan ke Axes:

ax.set_title(...)

atau:

ax.set(...)

Lupa Parameter ax pada Pandas​

Jika menggunakan Pandas:

fig, ax = plt.subplots()

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

Parameter:

ax=ax

diperlukan agar Pandas menggunakan Axes yang telah kita buat.


Menganggap Garis Mean sebagai Batas​

Garis:

ax.axhline(
over_50["chol"].mean(),
linestyle="--"
)

hanya menunjukkan nilai rata-rata.

Garis tersebut bukan batas statistik yang otomatis menentukan apakah suatu data normal, abnormal, atau outlier.


Ringkasan Method Penting​

MethodFungsi
plt.subplots()Membuat Figure dan Axes
ax.scatter()Membuat scatter plot
ax.plot()Membuat line plot
ax.bar()Membuat bar plot
ax.hist()Membuat histogram
ax.set()Mengatur beberapa properti Axes
ax.set_title()Mengatur judul
ax.set_xlabel()Mengatur label X
ax.set_ylabel()Mengatur label Y
ax.legend()Menambahkan legend
scatter.legend_elements()Menghasilkan elemen legend dari scatter plot
ax.axhline()Menambahkan garis horizontal
ax.set_xlim()Mengatur batas X
ax.set_ylim()Mengatur batas Y
fig.tight_layout()Mengatur layout
fig.savefig()Menyimpan Figure

Ringkasan Alur OO Method​

Pola dasar yang perlu diingat:

# 1. Setup
fig, ax = plt.subplots()

# 2. Plot
ax.scatter(
x,
y
)

# 3. Customize
ax.set(
title="My Plot",
xlabel="X",
ylabel="Y"
)

# 4. Supporting elements
ax.legend()

# 5. Display
plt.show()

Untuk visualisasi yang lebih kompleks:

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

scatter = ax.scatter(
x=over_50["age"],
y=over_50["chol"],
c=over_50["target"]
)

ax.set(
title="Heart Disease and Cholesterol Levels",
xlabel="Age",
ylabel="Cholesterol"
)

ax.legend(
*scatter.legend_elements(),
title="Target"
)

ax.axhline(
over_50["chol"].mean(),
linestyle="--"
)

fig.tight_layout()

plt.show()

Inti Materi​

Object-Oriented Method dapat diringkas menjadi:

plt.subplots()
↓
Figure + Axes
↓
ax.scatter()
↓
ax.set()
↓
ax.legend()
↓
ax.axhline()
↓
fig.tight_layout()
↓
plt.show()

Konsep terpenting adalah bahwa Figure merupakan container keseluruhan, sedangkan Axes merupakan area tempat data divisualisasikan.

Dengan bekerja secara eksplisit menggunakan ax, kita mendapatkan kontrol yang lebih terstruktur terhadap visualisasi.