仅清除matplotlib图的一部分

时间:2012-12-01 16:36:40

标签: matplotlib

我正在使用嵌入在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()

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

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

2 个答案:

答案 0 :(得分:5)

以下Q&A为此问题提供了解决方案。

换句话说,为了能够从图中删除一行:

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

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

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

my_line.remove()
del my_line

答案 1 :(得分:1)

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

我现在的问题是我在axes1图上定义了一个选择器,它似乎没有触发叠加图。