Scatterplot atau grafik pencar digunakan untuk menampilkan hubungan antara dua variabel numerik. Setiap titik dalam diagram mewakili satu observasi alias satu record, dan posisinya di sumbu X dan Y menunjukkan nilai dari dua variabel berbeda. Scatterplot berguna untuk mengidentifikasi pola, korelasi, dan anomali dalam data.
Dalam tutorial ini akan dibahas mengenai bagaimana membuat scatterplot dengan matplotlib, dan bagaimana melakukan kustomisasi, di antaranya mengubah warna, mengubah marker dan ukuran titik, menambahkan legend, dan lain-lain.
Langkah pertama, import modul yang akan digunakan. Dalam tutorial ini kita akan menggunakan matplotlib dan pandas.
import matplotlib.pyplot as plt
import pandas as pd
Siapkan data yang akan divisualisasikan. Data ini biasanya memiliki dua variabel bernilai numerik yang akan diplot pada sumbu X dan Y.
penjualan = [10, 25, 14, 25, 10, 15, 33, 17, 30, 25, 40, 41, 22, 18, 23]
harga = [25, 10, 25, 18, 33, 18, 10, 22, 32, 10, 15, 13, 12, 13, 12]
Untuk membuat scatteplot, gunakan fungsi plt.scatter() atau ax.scatter() jika menggunakan antarmuka object oriented.
fig, ax = plt.subplots()
ax.scatter(penjualan, harga)
# Menambahkan label dan judul
ax.set(xlabel='Penjualan', ylabel='Harga', title='Contoh Scatterplot')
plt.show()
Mengubah warna dan jenis titik Scatterplot
Kita dapat mengubah warna dan bentuk titik pada scatterplot, dengan menggunakan parameter color dan marker pada fungsi scatter().
Untuk mengubah warna titik, gunakan parameter color. Warna yang dapat digunakan dapat dilihat di sini.
Untuk mengubah bentuk titik, gunakan parameter marker. Pilhan marker yang dapat digunakan bisa dilihat di sini.
Misalnya untuk mengubah marker menjadi segitiga terbalik berwarna merah, maka kita set parameter color='red' dan marker='v'.
fig, ax = plt.subplots()
ax.scatter(penjualan, harga, color='red', marker='v')
ax.set(xlabel='Penjualan', ylabel='Harga', title='Contoh Scatterplot')
plt.show()
Mengubah Ukuran Titik Scatterplot
Ketika kita memiliki 3 variabel bertipe numerik, maka variabel yang ke-3 dapat direpresentasikan sebagai ukuran titik pada scatterplot. Semakin besar nilai variabelnya, semakin besar ukuran titiknya.
Untuk mengubah ukuran titik pada scatterplot, gunakan parameter s (size). Parameter ini membutuhkan masukan berupa list yang panjangnya sesuai dengan jumlah observasi/jumlah data.
Untuk itu, kita tambahkan data berat sebagai variabel tersebut.
berat = [40, 40, 90, 40, 40, 10, 40, 90, 100, 40, 40, 90, 40, 40, 40]
Selanjutnya data tersebut kita assign ke parameter s.
fig, ax = plt.subplots()
ax.scatter(penjualan, harga, color='red', marker='v', s=berat)
ax.set(xlabel='Penjualan', ylabel='Harga',
title='Scatterplot dengan Ukuran Titik yang Disesuaikan')
plt.show()
Menambahkan Variabel Kategorikal
Menampilkan scatterplot dengan tiga variabel, di mana variabel ketiga adalah variabel kategorikal, bisa dilakukan dengan menggunakan warna atau bentuk marker yang berbeda untuk setiap kategori.
Kita dapat menggunakan parameter color dan marker untuk melakukannya.
Untuk contoh ini kita akan menggunakan data sales yang terdiri dari 4 kolom : jenis, penjualan, harga, berat
Data ini kita load dari file csv ke dalam pandas dataframe.
sales = pd.read_csv('https://raw.githubusercontent.com/urfie/visualisasi_python/main/dataset1/sales.csv')
sales.head()
Dalam data tersebut terdapat 3 nilai untuk jenis, yaitu A, B, dan C. Masing-masing jenis akan kita wakili dengan warna merah, biru, dan hijau.
Dalam matplotlib, menampilkan scatterplot dengan 3 warna dapat dilakukan dengan 2 cara :
- Menentukan warna masing-masing record secara individual, dengan mengirimkan parameter color berupa list warna, satu warna untuk satu titik
- Dengan memanggil fungsi scatter terpisah untuk masing-masing kategori, dan mengirimkan parameter color berupa 1 nilai warna saja.
Untuk cara pertama, kita perlu membuat list warna yang sesuai untuk masing-masing record, sesuai dengan kategorinya.
colors=[]
for i in sales.jenis:
if i == 'A': colors.append('red')
if i == 'B': colors.append('blue')
if i == 'C': colors.append('green')
Selanjutnya list tersebut kita gunakan sebagai parameter colors. Dengan cara ini, kita hanya perlu memanggil fungsi scatter() satu kali saja.
fig, ax = plt.subplots()
ax.scatter(sales.penjualan, sales.harga, color=colors, s=sales.berat)
ax.set(xlabel='Penjualan', ylabel='Harga', title='Scatterplot dengan Kategori')
plt.show()
Pada cara ke 2, kita akan memanggil fungsi scatter() sebanyak 3 kali untuk tiap nilai kolom jenis. Sebelumnya, kita kelompokkan terlebih dahulu data sales berdasar jenis.
salesA = sales[sales.jenis == 'A']
salesB = sales[sales.jenis == 'B']
salesC = sales[sales.jenis == 'C']
Kemudian masing-masing kelompok data tersebut kita plot di axes yang sama.
fig, ax = plt.subplots()
ax.scatter(salesA.penjualan, salesA.harga, color='red', s=salesA.berat)
ax.scatter(salesB.penjualan, salesB.harga, color='blue', s=salesB.berat)
ax.scatter(salesC.penjualan, salesC.harga, color='green', s=salesC.berat)
ax.set(xlabel='Penjualan', ylabel='Harga', title='Scatterplot dengan Kategori')
plt.show()
Menambahkan legend pada scatterplot
Legend dalam scatterplot yang berisi variabel kategorikal sangat penting untuk membantu dalam interpretasi visualisasi.
Untuk menambahkan legend, ada 2 langkah yang harus dilakukan, yaitu : setting parameter label pada fungsi scatter(), kemudian memanggil fungsi legend().
fig, ax = plt.subplots()
ax.scatter(salesA.penjualan, salesA.harga, label='A',
color='red', s=salesA.berat)
ax.scatter(salesB.penjualan, salesB.harga, label='B',
color='blue', s=salesB.berat)
ax.scatter(salesC.penjualan, salesC.harga, label='C',
color='green', s=salesC.berat)
ax.set(xlabel='Penjualan', ylabel='Harga', title='Scatterplot dengan Legend')
ax.legend(title='Jenis')
plt.show()
Parameter alpha, Mengantisipasi Overlap
Tumpang tindih (overlapping) pada scatterplot dapat mengurangi kejelasan dan interpretabilitas. Overlapping terjadi ketika terlalu banyak titik data berada di area yang sama, membuatnya sulit untuk melihat pola atau hubungan di dalam data. Salah satu cara efektif untuk mengatasi masalah ini adalah dengan menggunakan parameter alpha dalam Matplotlib.
Parameter alpha dalam Matplotlib mengatur transparansi dari elemen plot. Nilai alpha berkisar dari 0 (transparan total) hingga 1 (tidak transparan sama sekali).
Untuk contoh ini kita akan gunakan data pasangan random number antara 0 dan 1 sebanyak 400 titik.
# data random
np.random.seed(1)
x = np.random.rand(400)
y = np.random.rand(400)
Kita akan set angka alpha ke 0.5 agar bagian-bagian yang overlap terlihat. Nilai ini dapat disesuaikan untuk mendapatkan level transparansi yang diinginkan.
fig, ax = plt.subplots()
ax.scatter(x, y, alpha=0.5)
ax.set(xlabel='Sumbu X', ylabel='Sumbu Y', title='Scatterplot dengan Overlap')
plt.show()
Wrapping Up
Scatterplot adalah alat yang sangat berguna untuk visualisasi hubungan antara dua variabel numerik. Dengan menggunakan Matplotlib, kita dapat membuat scatterplot yang sederhana maupun yang kompleks dengan berbagai kustomisasi seperti warna, ukuran, dan label.
Simak juga tutorial-tutorial lainnya :
- Visualisasi Dengan Matplotlib : Pie Chart
- Visualisasi Dengan Matplotlib - Membuat Bar Chart
- Visualisasi Dengan Matplotlib - Membuat Grafik Sederhana
- Visualisasi Dengan Matplotlib - Antarmuka Fungsional dan Object Oriented