2013-08-22 15 views
7

Kodum, matplotib kullanan verilerden bir dizi grafik çiziyor ve canlı bir gösterimde (örneğin ileriye ve geriye tuşlarına basarak) ileriye ve geriye doğru kaydırma yapmak istiyorum. fare). Şu anda her birini ayrı ayrı bir resim olarak kaydetmem ve ardından bunları kaydırmak için ayrı bir resim görüntüleyici kullanmam gerekiyor. Bunu python içinden yapmanın bir yolu var mı?Matplotlib grafikleri ile geriye doğru ve ileriye doğru kaydır

+0

Çizimleri oluşturmak için gereken süre, bunu yapmak için çok uzun süre mi yaşıyor? Yani 'bir düğmeye basın -> bir arsa oluştur -> göster 'vb. –

+0

@AleksanderLidtke Onları canlı olarak oluşturabilirim ama yarattığım arazilerden nasıl ileri ve geri kaydırırım? – phoenix

+0

geri aramalar. Http://matplotlib.org/users/event_handling.html sayfasına bakın. Ayakta olduğu gibi bu soru çok geniştir. – tacaswell

cevap

9

bu elde etmek için kolay bir yol bir listede x ve y dizilerin bir demet kaydedilerek ve daha sonra çizilen bir sonraki (x, y) çift alır bir işleyici olayını kullanmak edilir:

import numpy as np 
import matplotlib.pyplot as plt 

# define your x and y arrays to be plotted 
t = np.linspace(start=0, stop=2*np.pi, num=100) 
y1 = np.cos(t) 
y2 = np.sin(t) 
y3 = np.tan(t) 
plots = [(t,y1), (t,y2), (t,y3)] 

# now the real code :)  
curr_pos = 0 

def key_event(e): 
    global curr_pos 

    if e.key == "right": 
     curr_pos = curr_pos + 1 
    elif e.key == "left": 
     curr_pos = curr_pos - 1 
    else: 
     return 
    curr_pos = curr_pos % len(plots) 

    ax.cla() 
    ax.plot(plots[curr_pos][0], plots[curr_pos][1]) 
    fig.canvas.draw() 

fig = plt.figure() 
fig.canvas.mpl_connect('key_press_event', key_event) 
ax = fig.add_subplot(111) 
ax.plot(t,y1) 
plt.show() 

Bu kodda yinelemek için right ve left oklarını seçiyorum, ancak bunları değiştirebilirsiniz.

+0

Çok teşekkürler jabaldonedo --- örneğiniz projemde şimdi ve diğerlerinin çalıştığını teyit edebilirim. Benim durumumda 'key_event' bir dekoratörün içinde bir kapanış içinde bir kapanış. Sebebini yağmalamıyorum --- bu yüzden bana bir önceki satırın ucunda hatalı bir noktalama işareti olmamasına yardım edin --- fakat "curr_pos" tanımlanmamış global adı "almaya devam ettim," curr_pos tarafından açıkça tanımlanmış olmasına rağmen " = 0 '. 'Global olmayan curr_pos' yerine "hasattr (key_event," curr_pos "): key_event.curr_pos = 0 'şeklinde bir çözüm seçtim. Gerekirse sıfırlamak için 'key_event .__ dict __ = {}' kullanırdım. –

İlgili konular