Data Visualization

Matplotlib ile Gerçek Zamanlı Veri Görselleştirme

Spread the love

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

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.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir