2017-06-08 60 views
1

我有一個單獨的plot線程,帶有matplotlib和多進程。現在,如果我交互放大窗口,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()而不是autoscale_view()或重置&更新工具欄歷史記錄,以便它不會跳回到舊視圖?

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