如何在同一轴上重新绘制数据时重置NavigatonToolbar"历史记录"?

use*_*050 3 python wxpython graph matplotlib

我有一个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)
Run Code Online (Sandbox Code Playgroud)

每次我想绘制一些东西,我只需设置x和y并执行:

self.axes.plot(x,y, color = self.colours[i], label = text)
self.canvas.draw()
Run Code Online (Sandbox Code Playgroud)

如您所见,我有一个绑定到画布的NavigationToolBar.当我想绘制一个新图时,我打电话给:

self.axes.clear()
self.axes.plot(x,y, color = self.colours[i], label = text)
self.canvas.draw()
Run Code Online (Sandbox Code Playgroud)

问题就出现了:如果我在使用图表时可以使用工具栏的工具(缩放,步骤,平移等),那么当我稍后绘制新图形时,工具栏的"历史"将不会重置.如果我尝试使用此新图形中的工具栏,工具栏将使用的视图(当我单击"主页"或任何"步骤"时)将是旧图的视图.

我是matplotlib的新手,我可能做错了什么.任何人都可以帮我解决这个问题吗?在此先感谢,并对任何语法错误感到抱歉,英语不是我的母语.

tac*_*ell 5

你可以试试:

self.toolbar._views.clear()
self.toolbar._positions.clear()
self.toolbar._update_view() # maybe you don't need this
Run Code Online (Sandbox Code Playgroud)

我应该强调这是没有记录的,你正在进入和戳到图书馆的内部,所以不能保证,如果它现在有效,它将在未来工作(或者你会得到警告,它将停止工作).

在看看代码matplotlib/backend_bases.py的如何NavigationToolbar2(父类的蜡质版本)的作品.

  • @tcaswell - 那不是什么``self.toolbar.update``吗?(这似乎不是正确的名称,但除此之外似乎清除了堆栈).看起来这种方法已经存在了一段时间. (3认同)