仅清除matplotlib图的一部分

sav*_*tas 4 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))
Run Code Online (Sandbox Code Playgroud)

加载速度相对较慢(~1s),但不会经常变化.

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

self.axes.axhline(y,color='black')
Run Code Online (Sandbox Code Playgroud)

这些线条显然是立即绘制的,并且经常根据用户点击的内容进行更改.在这些情况下,先前绘制的线条需要消失,新的线条需要出现,而等高线图保持不变.

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

self.axes.clear()
Run Code Online (Sandbox Code Playgroud)

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

有没有办法只清除图中的线条?我试图通过做类似的事情来使用叠加的子图:

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()
Run Code Online (Sandbox Code Playgroud)

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

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

sav*_*tas 5

以下问答解答了这个问题.

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

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

my_line = self.axes.axhline(y,color='black')
Run Code Online (Sandbox Code Playgroud)

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

my_line.remove()
del my_line
Run Code Online (Sandbox Code Playgroud)