6

我正在使用嵌入在 WxPython GUI 中的 matplotlib 图来呈现一些数据。图的内容(显示的数据)随着单击按钮的功能不断变化,...

数据分为两种。

1)等高线

self.axes.contour(x_scale_map,y_scale_map,matrix,cl,cmap=my_cmap,extent=0,matrix.shape[1]-1,0,matrix.shape[0]-1))

这加载速度相对较慢(~1s),但不会经常更改。

2)在这个轮廓的顶部,我绘制了一些线条

self.axes.axhline(y,color='black')

这些线条显然是立即绘制的,并且经常随着用户点击的功能而变化。在这些情况下,之前绘制的线条需要消失,而新的线条需要出现,而等高线图保持不变。

现在,我的问题如下。我还没有找到只删除线条而不是轮廓的方法。获得所需结果的唯一方法似乎是:

self.axes.clear()

然后重新绘制轮廓和新线。但如前所述,每次重新加载轮廓都很慢,因此很烦人。

有没有办法只清除图中的线条?我试图通过执行以下操作来使用叠加子图:

self.axes1 = self.fig.add_subplot(111)
self.axes2 = self.fig.add_subplot(111)
self.axes1.contour(...)
self.axes2.axhline(y,color='black')
self.axes2.clear()

但最后一行清除了整个数字。

有谁知道如何实现所需的功能?谢谢

4

2 回答 2

6

下面的问答给出了这个问题的解决方案。

换句话说,要能够从图中删除一条线:

1)通过在绘制时存储其引用来跟踪线:

my_line = self.axes.axhline(y,color='black')

2) 然后按如下方式进行移除:

my_line.remove()
del my_line
于 2013-01-24T01:09:45.153 回答
1

通过使用等效的 self.axes2.cla() 来清除指定的轴,我成功地解决了这样的问题。就我而言,我必须使用 sharex 和 sharey 以及 self.axes2.patch.set_aplha(0.0) 来使 facecolor 透明并看透下面的图。

不过,我现在的问题是我在 axes1 图上定义了一个选择器,并且它似乎不会在存在覆盖图的情况下触发。

于 2017-07-25T14:52:14.993 回答