2017-12-31 66 views
0

私はラインプロットを更新しています。この更新を開始するイベントトリガーがあります。トリガがプロットを含む図形から来た場合は、すべてが問題ありません。しかし、トリガーが他の人物から来た場合、奇妙な結果が発生します。更新された行は、トレースをクリアしないままにしているように見えます。ここでプロットを更新しても、イベントトリガが他のFigureから来た場合、古いプロットは消去されませんか?

は一例です:

import matplotlib.pyplot as plt 
import numpy as np 

def onclick(event): 

    for ii in np.linspace(0., np.pi, 100): 
     y1 = y * np.sin(ii) 
     line1.set_ydata(y1) 
     ax.draw_artist(line1) 
     line2.set_ydata(-y1) 
     ax2.draw_artist(line2) 
     ax2.set_ylim(y1.min(), y1.max()) 
     fig.canvas.update() 
     plt.pause(0.1) 


x = np.linspace(0., 2*np.pi, 100) 
y = np.sin(x) 

fig = plt.figure() 
ax = fig.add_subplot(1, 2, 1) 
line1 = ax.plot(x, y)[0] 

ax2 = fig.add_subplot(1, 2, 2) 
line2 = ax2.plot(x, y)[0] 


fig2 = plt.figure() 

cid = fig2.canvas.mpl_connect('button_press_event', onclick) 

plt.show() 

私は画面に表示されるもの:

wrong

すべての残留そして、あなたはプロットのサイズを変更する場合は、注意してください、または数字として保存してください。イメージはなくなります。一方

、に変更一行場合:

cid = fig2.canvas.mpl_connect('button_press_event', onclick) 

が、それは正しいです。アニメーションは意図どおりに機能します。

答えて

0

fig.canvas.update()は何をするのかわかりません。あなたは

fig.canvas.draw_idle() 

によってその行を交換する場合は期待どおりに動作するはずです。その場合、アーティストを個別に描く必要はありません。

関連する問題