Python 如何重置NavigationToolbar“;历史";在同一轴上重新打印数据时?

Python 如何重置NavigationToolbar“;历史";在同一轴上重新打印数据时?,python,graph,matplotlib,wxpython,Python,Graph,Matplotlib,Wxpython,我有一个wxPython应用程序,它使用matplotlib重复打印数据。 代码如下所示: import matplotlib matplotlib.use('WXAgg') from matplotlib.figure import Figure from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigCanvas, \ NavigationToolbar2WxAgg as NavigationToolbar

我有一个wxPython应用程序,它使用matplotlib重复打印数据。 代码如下所示:

import matplotlib
matplotlib.use('WXAgg')
from matplotlib.figure import Figure
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigCanvas, \
NavigationToolbar2WxAgg as NavigationToolbar

self.fig = Figure((4,5), dpi = 100, facecolor = "white")
self.canvas = FigCanvas(self.panel, -1, self.fig)
self.toolbar = NavigationToolbar(self.canvas)
self.axes = self.fig.add_subplot(111)
每次我想画一些东西,我只需要设置x和y,然后做:

self.axes.plot(x,y, color = self.colours[i], label = text)
self.canvas.draw()
如您所见,我有一个绑定到画布的NavigationToolBar。当我想要绘制新图形时,我调用:

self.axes.clear()
self.axes.plot(x,y, color = self.colours[i], label = text)
self.canvas.draw()
问题来了:如果在可视化绘图时使用工具栏的工具(缩放、步长、平移等),则在以后绘制新图形时,工具栏的“历史”不会重置。如果我尝试在这个新图形中使用工具栏,工具栏将使用的视图(当我单击“主页”或任何“步骤”时)将是旧绘图的视图

我对matplotlib有点陌生,我可能做错了什么。 有人能帮我解决这个问题吗? 提前谢谢,对于语法错误,我深表歉意, 英语不是我的母语。

你可以试试:

self.toolbar._views.clear()
self.toolbar._positions.clear()
self.toolbar._update_view() # maybe you don't need this
我要强调的是,这是没有文档记录的,而且你正在进入并戳图书馆的内部,因此不能保证如果它现在起作用,将来也会起作用(或者你会得到警告,它将停止工作)


查看
matplotlib/backend_base.py中的代码,了解
NavigationToolbar2
(Wx版本的父类)的工作原理。

home按钮实际上将导航堆栈中的第一个元素带到顶部

如果要手动控制“主页”按钮设置的限制,可以在位修改导航堆栈中的第一个元素:

if len(self.fig.canvas.toolbar._nav_stack._elements) > 0:
    # Get the first key in the navigation stack
    key = list(self.fig.canvas.toolbar._nav_stack._elements[0].keys())[0]
    # Construct a new tuple for replacement
    alist = []
    for x in self.fig.canvas.toolbar._nav_stack._elements[0][key]:
        alist.append(x)
    alist[0] = (new_xmin, new_xmax, new_ymin, new_ymax)
    # Replace in the stack
    self.fig.canvas.toolbar._nav_stack._elements[0][key] = tuple(alist)

当您点击主页按钮时,显示的范围现在将是
[new\u xmin,new\u xmax,new\u ymin,new\u ymax]

嘿,抱歉耽搁了。您的解决方案非常有效。。。图书馆不应该有一个针对这些情况的公共方法吗?还是有更正确的方法?无论如何,谢谢你。我曾试图阅读您提到的代码,但没有成功地理解它。@user2284050我同意这是一个合理的功能。我建议在github跟踪上创建一个问题,请求它。@tcaswell-这不是
self.toolbar.update
所做的吗?(这似乎不是正确的名称,但除此之外,似乎清除了堆栈)。这种方法似乎已经存在了一段时间。