使用Qt4Agg后端重置Matplotlib中的工具栏历史记录

2024-05-16 22:13:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个单独的绘图线程,带有matplotlib和多进程。现在,如果以交互方式放大窗口,autoscale_view()将不再工作(使用autoscale()修复)。但是工具箱中的“home”按钮仍然不起作用:它似乎调用autoscale_view(),不显示更新的视图,而是显示旧视图(在放大时)。示例代码:

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

试着在打印过程中放大,然后按Home按钮。有没有办法让主页按钮使用autoscale()而不是autoscale_view(),或者重置并更新工具栏历史记录,这样它就不会跳回旧视图了?在

p.s.:“主页”-按钮=重置原始视图


Tags: testimportview视图falseplotmatplotlibplt
1条回答
网友
1楼 · 发布于 2024-05-16 22:13:52

我终于通过反复试验找到了答案。有一个更新工具栏的函数。这将更新工具栏的历史记录,并将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

相关问题 更多 >