Python 如何重置NavigationToolbar“;历史";在同一轴上重新打印数据时?
我有一个wxPython应用程序,它使用matplotlib重复打印数据。 代码如下所示: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
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
所做的吗?(这似乎不是正确的名称,但除此之外,似乎清除了堆栈)。这种方法似乎已经存在了一段时间。