我有一个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的新手,我可能做错了什么。 任何人都可以帮我解决这个问题吗? 在此先感谢,并抱歉任何语法错误, 英语不是我的母语。
答案 0 :(得分:5)
您可以尝试:
self.toolbar._views.clear()
self.toolbar._positions.clear()
self.toolbar._update_view() # maybe you don't need this
我应该强调这是没有记录的,你正在进入并戳到图书馆的内部,所以不能保证如果它现在有效,它将在未来工作(或者你会得到它的警告将停止工作)。
查看matplotlib/backend_bases.py
中有关NavigationToolbar2
(Wx版本的父类)如何工作的代码。
答案 1 :(得分:1)
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_xmin, new_xmax, new_ymin, new_ymax]
。