Veri görselleştirme için güçlü bir Python kütüphanesi olan Matplotlib, statik grafikler oluşturmada mükemmeldir. Ancak yetenekleri gerçek zamanlı görselleştirmeleri de kapsamaktadır. Bu makale, verimlilik ve en iyi uygulamalara odaklanarak Matplotlib kullanarak dinamik, güncellenen grafikler oluşturma tekniklerini ele almaktadır.
İçindekiler:
FuncAnimation()
: Basitleştirilmiş Bir Yaklaşım- Doğrudan Tuval İşlemi:
canvas.draw()
vecanvas.flush_events()
- Gerçek Zamanlı Dağılım Grafikleri
- Yüksek Frekanslı Veriler için Performans Optimizasyonu
FuncAnimation()
: Basitleştirilmiş Bir Yaklaşım
Matplotlib’in FuncAnimation
‘ı animasyon oluşturmayı basitleştirir. Grafiği güncellemek için bir fonksiyonu tekrar tekrar çağırır ve gerçek zamanlı verinin yanılsamasını yaratır. Orta derecede karmaşık animasyonlar için idealdir.
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import time
import random
fig, ax = plt.subplots()
line, = ax.plot([], [], 'r-')
ax.set_xlim(0, 10)
ax.set_ylim(0, 10)
xdata, ydata = [], []
def animate(i):
xdata.append(i)
ydata.append(random.randint(0, 10))
line.set_data(xdata, ydata)
return line,
ani = animation.FuncAnimation(fig, animate, frames=100, interval=20, blit=True)
plt.show()
Bu, bir çizgi grafiği oluşturur. FuncAnimation
, animate
fonksiyonunu tekrar tekrar çağırır. animate
veri ekler, line.set_data()
kullanarak çizgiyi günceller ve güncellenmiş öğeyi döndürür. blit=True
yeniden çizimi optimize eder. interval
güncelleme sıklığını (milisaniye) kontrol eder.
Doğrudan Tuval İşlemi: canvas.draw()
ve canvas.flush_events()
Özellikle FuncAnimation
‘ın verimsiz olabileceği yüksek frekanslı güncellemelerde daha ince bir kontrol için, canvas.draw()
ve canvas.flush_events()
kullanarak tuvali doğrudan işleyin. Bu daha fazla kontrol sağlar ancak Matplotlib’in iç işleyişini daha derinlemesine anlama gerektirir.
import matplotlib.pyplot as plt
import time
import random
fig, ax = plt.subplots()
line, = ax.plot([], [], 'r-')
ax.set_xlim(0, 10)
ax.set_ylim(0, 10)
xdata, ydata = [], []
for i in range(100):
xdata.append(i)
ydata.append(random.randint(0, 10))
line.set_data(xdata, ydata)
fig.canvas.draw()
fig.canvas.flush_events()
time.sleep(0.02)
plt.show()
Bu, aynı sonucu elde eder, ancak canvas.draw()
ve canvas.flush_events()
‘i doğrudan çağırır. canvas.flush_events()
GUI donmalarını önler. Bu yöntem kaynak yoğunluklu ancak esneklik sağlar.
Gerçek Zamanlı Dağılım Grafikleri
Gerçek zamanlı dağılım grafikleri oluşturmak benzerdir. ax.plot()
yerine ax.scatter()
kullanın ve dağılım grafiğinin verilerini güncelleyin.
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import time
import random
fig, ax = plt.subplots()
scatter, = ax.plot([], [], 'ro') # Dağılım grafiği kullanın
ax.set_xlim(0, 10)
ax.set_ylim(0, 10)
xdata, ydata = [], []
def animate(i):
xdata.append(random.randint(0, 10))
ydata.append(random.randint(0, 10))
scatter.set_data(xdata, ydata)
return scatter,
ani = animation.FuncAnimation(fig, animate, frames=100, interval=20, blit=True)
plt.show()
Bu örnek, bir dağılım grafiği için FuncAnimation
kullanır. Gerektiğinde interval
ve frames
değerlerini ayarlayın. Daha fazla kontrol için canvas.draw()
/canvas.flush_events()
kullanabilirsiniz.
Yüksek Frekanslı Veriler için Performans Optimizasyonu
Son derece yüksek frekanslı veriler için şu optimizasyonları göz önünde bulundurun:
- Güncelleme sıklığını azaltın: Gerektiğinde grafiği güncelleyin.
- Veri noktalarını sınırlayın: Son veri noktalarının kayan bir penceresini tutun.
- Blitleme kullanın: (
blit=True
) Bu, yalnızca değiştirilen bölümleri yeniden çizerek performansı önemli ölçüde iyileştirir. - Alternatif kütüphaneleri keşfedin: Son derece yüksek frekanslı veriler için, performans için optimize edilmiş Pyqtgraph veya Bokeh gibi kütüphaneleri göz önünde bulundurun.
Bu teknikler, Matplotlib’te gerçek zamanlı görselleştirmeler oluşturmak için sağlam bir temel sağlar. Belirli ihtiyaçlarınıza ve veri özelliklerinize göre bunları uyarlamayı unutmayın.