仅清除matplotlib图的一部分

仅清除matplotlib图的一部分,matplotlib,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

我正在使用嵌入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()
但最后一行清除了整个数字

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

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

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

1) 绘制线时,通过存储线的参考来跟踪线:

my_line = self.axes.axhline(y,color='black')
2) 然后按照以下步骤进行拆卸:

my_line.remove()
del my_line

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


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

您只需将线变为不可见并重新绘制轴即可。(对于任何matplotlib美工程序,您都可以执行
artist.set_visible(False)
)此外,如果您正在执行某些操作,可以更新现有行的数据,而不是添加新行并隐藏旧行,则只需更新旧行即可。有很多隐藏的艺术家最终会减慢情节的渲染速度。嗨@JoeKington,我没有想到你提出的解决问题的方法。我在这方面做了更多的研究,也发现了以下内容。换句话说,我通过组合使用
artist.set_visible(True/False)
artist.remove()
以及
del artist
获得了我想要的一切。Thanks@tcaswell”“好的,谢谢