Mengupdate Grafik Matplotlib Secara Dinamis
Matplotlib adalah sebuah library Python yang digunakan untuk membuat grafik dan visualisasi data. Salah satu fiturnya adalah kemampuan untuk mengupdate grafik secara dinamis. Berikut beberapa cara untuk mengupdate grafik Matplotlib:
Menggunakan Paket FuncAnimation
Paket FuncAnimation dari Matplotlib memungkinkan kita untuk membuat animasi yang dapat diupdate secara dinamis. Pertama, import fungsi tersebut menggunakan from matplotlib.animations import FuncAnimation. Lalu, inisialisasikan data untuk frame pertama (minimal). Buat plot frame pertama. Definisikan fungsi (misalnya update) yang mengambil nomor frame sebagai input dan menciptakan frame baru. Fungsi ini akan update data setiap kali dijalankan dan kemudian membuat plot baru. Panggil fungsi FuncAnimation. Dalam argumennya, pass fungsi yang telah di definisikan tadi sebagai fungsi dan frames = None (dalam kasus ini, frame akan disediakan secara otomatis). Panggil metode plt.show().
Contoh kode Python3:
from matplotlib.animation import FuncAnimation
import matplotlib.pyplot as plt
import random
x = [1]
y = [random.randint(1,10)]
fig, ax = plt.subplots()
graph = ax.plot(x,y,color='g')[0]
plt.ylim(0,10)
def update(frame):
global graph
x.append(x[-1] + 1)
y.append(random.randint(1,10))
graph.set_xdata(x)
graph.set_ydata(y)
plt.xlim(x[0], x[-1])
anim = FuncAnimation(fig, update, frames=None)
plt.show()
Output:
Mengupdate Grafik Matplotlib menggunakan Mode Interaktif pyplot
Mode interaktif pyplot defaultnya tidak diaktifkan dan sebagai hasil, grafik hanya akan digambar ketika fungsi show dipanggil. Kami dapat mengaktifkan mode interaktif dengan memanggil fungsi <pyplot-object>.ion(). Dengan mode interaktif diaktifkan, grafik akan digambar secara instan dan diperbarui segera setiap kali perubahan dibuat. Kami dapat menggunakan perilaku ini untuk mengupdate grafik secara dinamis dengan cara berikut:
Contoh kode Python3:
import matplotlib.pyplot as plt
import random
plt.ion()
y = [random.randint(1,10) for i in range(20)]
x = [*range(1,21)]
graph = plt.plot(x,y)[0]
plt.ylim(0,10)
plt.pause(1)
while(True):
y.append(random.randint(1,10))
x.append(x[-1]+1)
graph.remove()
graph = plt.plot(x,y,color='g')[0]
plt.xlim(x[0], x[-1])
plt.pause(0.25)
Output:
Contoh Grafik Scatter Matplotlib yang Dinamis
Dalam contoh ini, kami akan mengupdate grafik scatter-chart dengan menggunakan fungsi Figure.canvas.draw() . Buat data awal (koordinat untuk satu titik). Definisikan fungsi (update) yang update data, lalu clears axes, membuat graph baru berdasarkan data yang diupdate dan akhirnya mengforce artist untuk merefresh menggunakan figure.canvas.draw() metode. Di sini, kami akan update data dengan menambahkan koordinat scatter-point baru ke dalamnya. Panggil fungsi FuncAnimation() dan pass objek figure dan fungsi update tadi sebagai argumen. Panggil metode plt.show() untuk meluncurkan figure.
Contoh kode Python3:
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import random
x = [random.randint(1,100)]
y = [random.randint(1,100)]
fig, ax = plt.subplots()
def update(frame):
x.append(random.randint(1,100))
y.append(random.randint(1,100))
ax.clear()
ax.scatter(x,y, s=y, c='b', alpha=0.5)
fig.canvas.draw()
anim = FuncAnimation(fig, update)
plt.show()
Output:
Kesimpulan
Ada setidaknya tiga metode untuk mencapai tugas mengupdate grafik secara dinamis di Matplotlib – Pertama menggunakan paket FuncAnimation dari Matplotlib, kedua menggunakan mode interaktif pyplot yang membuat gambar diupdate secara instan, dan ketiga menggunakan fungsi figure.canvas.draw() setelah update untuk merefresh artist.