2010-11-09 9 views
18

Dizilerde saklanan 3 histogramı güncelleyen karmaşık bir algoritmam var. Algoritmamda hata ayıklamak istiyorum, bu yüzden dizileri bir kullanıcı arabiriminde histogram olarak göstermeyi düşünüyordum. Bunu yapmanın en kolay yolu nedir. (Hızlı uygulama geliştirme, iyileştirilmiş koddan daha önemlidir.)Gerçek zamanlı grafikleri python programı için basit bir arayüzde nasıl görüntülerim?

Qt (C++ ile) ve matplotlib ile ilgili bazı deneyimlerim var.

(Bu soruyu bir iki günlüğüne açık bırakacağım çünkü çok fazla deneyimim olmadan çözümleri değerlendirmem benim için zor. Umarım topluluğun oyları en iyi answer.)

+0

Eğer hızlı bir gelişme peşindeyseniz, Tkinter'i öneririm. PyQt'den çok daha sezgisel IMO. –

+0

Zorluğu göremiyorum. Sadece histogramları çizmek için matplotlib kullanın. Herhangi bir sorun mu var? –

+0

@Bernardo, Temel veri yapıları güncellendikçe güncellenmelerini istiyorum. Matplotlib kullanarak çizim yaparsam, her zaman adımı için bir grafik alır mıyım? Her zaman adımı için bir pencerem olduğunda izlemesi zor olacak. –

cevap

21

Düzenleme: Günümüzde daha kolay ve daha iyi matplotlib.animation kullanmaktır:

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.animation as animation 


def animate(frameno): 
    x = mu + sigma * np.random.randn(10000) 
    n, _ = np.histogram(x, bins, normed=True) 
    for rect, h in zip(patches, n): 
     rect.set_height(h) 
    return patches  

mu, sigma = 100, 15 
fig, ax = plt.subplots() 
x = mu + sigma * np.random.randn(10000) 
n, bins, patches = plt.hist(x, 50, normed=1, facecolor='green', alpha=0.75) 

ani = animation.FuncAnimation(fig, animate, blit=True, interval=10, 
           repeat=True) 
plt.show() 

animasyonlu grafik here yapma örneği vardır. kodunu first posted kullanıyorum saniyede 4 kare ile karşılaştırıldığında ben saniyede yaklaşık 14 kare bu şekilde alabilirsiniz

import numpy as np 
import matplotlib.pyplot as plt 

plt.ion() 
mu, sigma = 100, 15 
fig = plt.figure() 
x = mu + sigma*np.random.randn(10000) 
n, bins, patches = plt.hist(x, 50, normed=1, facecolor='green', alpha=0.75) 
for i in range(50): 
    x = mu + sigma*np.random.randn(10000) 
    n, bins = np.histogram(x, bins, normed=True) 
    for rect,h in zip(patches,n): 
     rect.set_height(h) 
    fig.canvas.draw() 

,: Bu örnekte üzerine Bina, gibi bir şey deneyebilirsiniz. Hile, matplotlib'in tam rakamlar çizmesini istemekten kaçınmaktır. Bunun yerine, bir kez plt.hist numaralı telefonu arayın, ardından histogramı güncellemek için numaralı telefonu kullanarak mevcut matplotlib.patches.Rectangle s'yi değiştirin ve güncellemeleri görünür hale getirmek için fig.canvas.draw() numaralı telefonu arayın.

+0

Bu iyi çalışıyor ama çizim penceresi yanıt vermiyor ya da kendi kendine kapanıyor .. herhangi bir öneri? – DevC

+0

@DevC: Günümüzde, 'matplotlib.animation' kullanmak daha iyidir. Yukarıda bir örnek ekledim. – unutbu

+0

Örnek animasyon videolarını burada bulabilirsiniz: http://jakevdp.github.io/blog/2012/08/18/matplotlib-animation-tutorial/ – kakyo

1

.show numaralı telefonu arayarak bir kez daha etkileşimli modda matplotlib'i kullanmanızı öneririm, o zaman kendi penceresinde açılır, eğer yoksa sadece bellekte mevcutsa ve bir dosyaya yazılabilir Onunla bitti.

1

Şimdi bakın, gerçek zaman dediğinizde, 5 Hz'den daha yüksek bir yenileme hızı istediğiniz anlamına gelirse, matplotlib bu işi yapmayacaktır. Bu sorunu daha önce yaşadım, PyQt ile çalışan PyQwt için gittim.

+1

PyQwt şu anda gözetimsiz olarak kabul edilir.Umarım bu gelecekte değişecek, ama şimdi dikkat edin .. – Luke

9

Gerçek zamanlı çizim için, Chaco, pyqtgraph veya glumpy veya visvis gibi opengl tabanlı kitaplıklardan herhangi birini denemenizi öneririz. Matplotlib, olduğu gibi harika, genellikle bu tür bir uygulama için uygun değildir.

Düzenleme: glumpy, visvis, galry ve pyqtgraph ait geliştiriciler tüm vispy adında bir görselleştirme kitaplığına işbirliği yapıyor. Bu gelişme hala erken, ama umut verici ve zaten oldukça güçlü.

+0

[Vispy web sitesi] (http://vispy.org) bir çeşitli uygulamaların galerisi ve bu uygulamalara karşılık gelen kod. – Mark

İlgili konular