我正在使用嵌入在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()
但最后一行清除了整个数字。
有谁知道如何实现所需的功能? 感谢
答案 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图上定义了一个选择器,它似乎没有触发叠加图。