当前位置: 首页 > 面试题库 >

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

昝浩阔
2023-03-14
问题内容

我有一个使用matplotlib重复绘制数据的wxPython应用程序。代码看起来像这样:

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_bases.py的如何NavigationToolbar2(父类的蜡质版本)的作品。



 类似资料:
  • 问题内容: 我在程序开始时,根据数据库中的某些内容,以编程方式在JScrollPane中添加了许多组件(JPanels,JLabels等)。 似乎对于GUI(?)而言,此过程太快了,因此JScrollPane并不总是正确更新,即,即使内部JPanel大于可见区域,滚动条也不可见。 调整窗口大小(JFrame)可以解决此问题,因为我认为Java在调整组件大小时会重新打印它们。 作为测试,我添加了一个

  • 许多时候,在使用 Git 时,可能会因为某些原因想要修正提交历史。 Git 很棒的一点是它允许你在最后时刻做决定。 你可以在将暂存区内容提交前决定哪些文件进入提交,可以通过 stash 命令来决定不与某些内容工作,也可以重写已经发生的提交就像它们以另一种方式发生的一样。 这可能涉及改变提交的顺序,改变提交中的信息或修改文件,将提交压缩或是拆分,或完全地移除提交 - 在将你的工作成果与他人共享之前。

  • 我编写了这段代码,可以在JavaFX画布上绘制。它可以很好地工作,但我不知道如何重新绘制画布(比如在Swing中),以便在新画布上重新开始绘制。这是我的代码,非常感谢你的帮助!马里奥

  • 我试图在一个5年的时间序列图上绘制日期(N=50),我很难弄清楚如何在for循环上运行迭代。下面是我试图绘制日期的一个例子。 我正在绘制日期的视觉效果 目前,我正在尝试: 我收到一个错误: 我不确定这是否与dtype是datetime有关,或者我是否需要尝试另一种方法,但是任何建议/指导都非常感谢! 谢谢你! 这就是我试图完成的:示例图像 编辑:生成打印的代码 ` 这将复制我使用的精确数据的样本。

  • 所以我有一个包含JTable的应用程序。JTable位于JScrollPane的内部,JScrollPane绘制在JFrame上。 现在,在我的应用程序中,我打开一个新窗口,向该表中添加一个新行,在我单击一个按钮保存更改后,新窗口关闭。 现在我尝试在新窗口关闭后添加这些行: 这里有什么问题?

  • 基本上,从接收一个单击事件,然后我需要多次更改HTML元素,问题是WebView只显示最后一次更改,这意味着渲染不是立即进行的。 问题:如何制作