Sesi 12: Visualisasi (Matplotlib) & Aplikasi MATLAB
Penyajian Data: Mengubah array numerik hasil komputasi menjadi visual yang komunikatif dan terstandarisasi untuk laporan ilmiah dan analisis data science.
I. Ulasan: Matplotlib – Standar Visualisasi di Python
Matplotlib adalah pustaka visualisasi paling populer di Python. Ia menyediakan antarmuka yang kuat (sering disebut antarmuka pyplot) yang sangat mirip dengan fungsi *plotting* di MATLAB, menjadikannya transisi yang mulus bagi mahasiswa.
Kebutuhan Utama Visualisasi Saintifik:
- **Plot Garis (plot()):** Untuk memvisualisasikan fungsi matematika atau data terurut waktu (time series).
- **Scatter Plot (scatter()):** Untuk memvisualisasikan hubungan antar variabel (data eksperimen).
- **Histogram (hist()):** Untuk menganalisis distribusi data (statistik).
- **Anatomi Plot:** Judul, label sumbu (x dan y), legenda, dan grid harus selalu disertakan untuk kejelasan.
Sekilas MATLAB vs. Python (Plotting)
Meskipun MATLAB adalah alat komputasi yang kuat, Python dengan Matplotlib dan NumPy menawarkan ekosistem terbuka yang setara. Mahasiswa harus memahami bahwa fungsi dasar *plotting* pada keduanya memiliki logika yang sangat mirip:
| Deskripsi | Sintaks MATLAB | Sintaks Python/Matplotlib |
|---|---|---|
| Membuat Plot | plot(x, y) |
plt.plot(x, y) |
| Menambah Label X | xlabel('Waktu') |
plt.xlabel('Waktu') |
| Menampilkan | (Otomatis) | plt.show() |
II. Contoh Manual: Visualisasi Fungsi Gelombang
Kita akan memplot fungsi Sinus ($\text{y} = \sin(x)$) dari 0 hingga 2π. Langkah-langkah manualnya adalah:
2.1. Persiapan Data (NumPy):
Langkah 2: Hitung array $y$ = $\sin(x)$ menggunakan np.sin(x).
Hasil: Array $x$ dan $y$ siap.
2.2. Pembuatan Plot (Matplotlib):
Langkah 4: Atur label sumbu, judul, dan grid.
Langkah 5: Tampilkan plot dengan plt.show().
Seluruh proses ini hanya membutuhkan 5 baris kode berkat NumPy dan Matplotlib.
III. Kode Praktik (Google Colab)
3.1. Kode Sederhana: Plot Garis dan Scatter Plot
Visualisasi data eksperimen sederhana (posisi vs. waktu).
import matplotlib.pyplot as plt
import numpy as np
# Data Eksperimen (NumPy array)
waktu = np.array([0, 1, 2, 3, 4, 5])
posisi = np.array([0, 2, 8, 18, 32, 50]) # Mengikuti pola kuadrat (Gerak lurus berubah beraturan)
# 1. Plot Garis (untuk melihat tren)
plt.plot(waktu, posisi, label='Posisi Aktual', color='cyan', linestyle='--')
# 2. Scatter Plot (untuk melihat titik data mentah)
plt.scatter(waktu, posisi, label='Data Eksperimen', color='lime', marker='o')
# Penataan Plot
plt.title('Posisi vs. Waktu (GLBB)')
plt.xlabel('Waktu (detik)')
plt.ylabel('Posisi (meter)')
plt.legend()
plt.grid(True, linestyle=':', alpha=0.6)
plt.show() # Tampilkan plot
3.2. Kode Kompleks: Histogram Distribusi Energi
Menggunakan np.random untuk menghasilkan 1000 titik data energi (misalnya, Maxwell-Boltzmann) dan memvisualisasikan distribusinya.
import matplotlib.pyplot as plt
import numpy as np
# Simulasikan 1000 data energi yang terdistribusi secara normal (Gaussian)
# Simbolisasi distribusi pengukuran atau noise
mean_energy = 5.0 # Rata-rata Energi (keV)
std_dev = 1.5 # Deviasi Standar
data_energi = np.random.normal(mean_energy, std_dev, 1000)
# Membuat Histogram
plt.figure(figsize=(8, 5)) # Ukuran plot custom
# Bins: Jumlah batang pada histogram
plt.hist(data_energi, bins=30, color='red', alpha=0.7, edgecolor='black')
# Penataan Plot
plt.title('Distribusi Energi Partikel')
plt.xlabel('Energi (keV)')
plt.ylabel('Frekuensi')
plt.grid(axis='y', alpha=0.5, linestyle=':')
plt.show()
3.3. Studi Kasus: Plot Gerak Parabola (Dua Kurva dalam Satu Plot)
Memvisualisasikan dua lintasan Gerak Parabola (dengan sudut elevasi yang berbeda) untuk perbandingan, menggunakan numpy.sin dan numpy.cos.
import matplotlib.pyplot as plt
import numpy as np
# Konstanta Fisika
v0 = 20.0 # Kecepatan awal (m/s)
g = 9.81 # Gravitasi (m/s^2)
# Array Waktu (0 sampai 4 detik)
t = np.linspace(0, 4, 100)
def hitung_lintasan(sudut_derajat, t_array):
theta = np.radians(sudut_derajat)
# x = v0 * cos(theta) * t
x = v0 * np.cos(theta) * t_array
# y = v0 * sin(theta) * t - 0.5 * g * t^2
y = v0 * np.sin(theta) * t_array - 0.5 * g * (t_array ** 2)
return x, y
# Lintasan 1: Sudut 30 derajat
x30, y30 = hitung_lintasan(30, t)
# Lintasan 2: Sudut 60 derajat
x60, y60 = hitung_lintasan(60, t)
# Plotting
plt.figure(figsize=(10, 6))
plt.plot(x30, y30, label='Sudut 30°', color='yellow')
plt.plot(x60, y60, label='Sudut 60°', color='red')
plt.title('Perbandingan Gerak Parabola')
plt.xlabel('Jarak Horizontal (meter)')
plt.ylabel('Ketinggian (meter)')
plt.ylim(bottom=0) # Pastikan y tidak negatif
plt.legend()
plt.grid(True, linestyle=':', alpha=0.6)
plt.show()
IV. Penugasan / PR Sesi 12: Visualisasi Model Pertumbuhan
Tugas Anda adalah membuat plot garis (Line Plot) untuk membandingkan dua model pertumbuhan:
- Data: Buat array waktu (t) dari 0 hingga 20.
- Model Eksponensial: Hitung y_exp = 2t.
- Model Linear: Hitung y_lin = 3 × t + 1.
- Visualisasi: Plot y_exp dan y_lin pada grafik yang sama, berikan label sumbu ("Waktu" dan "Populasi/Nilai") serta legend untuk membedakan kedua model tersebut.