2013-08-22 63 views
7

私のコードはmatplotibを使用してデータから多数のプロットを生成しています。ライブデモでスクロールしたい場合があります。ハツカネズミ)。現在私はそれぞれ別々に画像として保存してから別の画像ビューアを使ってそれらをスクロールしなければなりません。これをpython内から完全に行う方法はありますか?matplotlibプロットを前後にスクロール

+0

プロットを生成するのに必要な時間が長すぎます。私。 'ボタンを押す - >プロットを生成する - >それを表示するなど。 –

+0

@AleksanderLidtkeライブを生成することはできますが、私が作成したプロットを順方向および逆方向にスクロールするにはどうすればよいですか? – phoenix

+0

コールバック。 http://matplotlib.org/users/event_handling.htmlを参照してください。それが立てば、この質問は広すぎます。 – tacaswell

答えて

9

それを達成するための簡単な方法は、リスト内のxとy配列の組を格納した後、プロットされるべき次の(x、y)のペアを選ぶハンドライベントを使用している:

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() 

このコードでは、反復する矢印としてrightleftを選択しますが、変更することはできます。

+0

ありがとうございましたjabaldonedo ---あなたのサンプルは今私のプロジェクトに入っていますので、他の人にはそれが動作することを確認できます。私の場合、 'key_event'はデコレータ内のクロージャ内のクロージャです。私は原因を調べないので、前の行の最後に誤った句読点はありませんが、curr_posによって明確に定義されているにもかかわらず、 "グローバル名' curr_pos'が定義されていません " = 0 'となる。 'global curr_pos'の代わりに' not hasattr(key_event、 "curr_pos"):key_event.curr_pos = 0'という形式でソリューションを選びました。私は 'key_event .__ dict __ = {}'を使って必要に応じてリセットします。 –

関連する問題