2017-06-08 13 views
1

私はmatplotlibとmultiprocessesを持つ別のプロットスレッドを持っています。これで、ウィンドウを対話的に拡大すると、autoscale_view()はもう動かない(autoscale()を使って固定)。しかし、ツールボックスの "home"ボタンはまだ動作していません。autoscale_view()を呼び出すように見えますが、更新されたビューは表示されず、古いビュー(ズームインされた時点)が表示されます。例コード:Qt4Aggバックエンドを使用したMatplotlibのツールバーの履歴

import matplotlib 
matplotlib.use("qt4agg") 
from matplotlib import pyplot as plt 
import multiprocessing 

def reset_view(): 
    plt.get 

    xdata = [] 
    ydata = [] 
    temp = 0 

    test_ax = plt.gca() 
    test_line, = plt.plot(xdata, ydata) 
    plt.show(block=False) 

    for i in range(10): 
     temp = temp+1 
     xdata.append(temp) 
     ydata.append(temp) 
     test_line.set_data(xdata, ydata) 

     test_ax.relim() 
     test_ax.autoscale(tight= False) 
     plt.show(block=False) 
     plt.pause(2) 

plot_thread = multiprocessing.Process(target = reset_view, args =()) 

reset_view() 

if __name__ == '__main__': 
    plot_thread.start() 

プロット中にズームインし、その後にホームボタンを押してください。 autoscale_view()の代わりにautoscale()を使用するか、&をリセットしてツールバーの履歴を更新して、古いビューに戻ることができないようにする方法はありますか?

P.s:「ホーム」 - ボタン=元のビューに

答えて

2

をリセット私は最終的に(&エラーを試してみてください)それを把握することができた:ツールバーを更新する機能があります。これにより、ツールバーの履歴が更新され、home()関数が新しいビューに設定されます。ソリューション:

figure = plt.gcf() #Get current figure 
toolbar = figure.canvas.toolbar #Get the toolbar handler 
toolbar.update() #Update the toolbar memory 
plt.show(block = False) #Show changes 
関連する問題