Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python matplotlib存储和删除艺术家_Python_Matplotlib - Fatal编程技术网

Python matplotlib存储和删除艺术家

Python matplotlib存储和删除艺术家,python,matplotlib,Python,Matplotlib,我在matplotlib艺术家身上遇到了一个奇怪的问题 免责声明:不幸的是,我只在jupyter笔记本和tkinter GUI中使用过matplotlib(我在tkinter GUI中发现了这个),所以我不知道如何编写简单的代码来复制这个问题。然而,我不认为示例代码在这种情况下是绝对需要的 现在问题是: 为了加快GUI中的绘图速度,我不会在绘图元素发生变化时重新绘制所有内容,而是使用set\u ydata和canvas.draw等方法。有时还需要完全删除行,这可以通过artist.remove完

我在matplotlib艺术家身上遇到了一个奇怪的问题

免责声明:不幸的是,我只在jupyter笔记本和tkinter GUI中使用过matplotlib(我在tkinter GUI中发现了这个),所以我不知道如何编写简单的代码来复制这个问题。然而,我不认为示例代码在这种情况下是绝对需要的

现在问题是:

为了加快GUI中的绘图速度,我不会在绘图元素发生变化时重新绘制所有内容,而是使用
set\u ydata
canvas.draw
等方法。有时还需要完全删除行,这可以通过
artist.remove
完成。问题是:当我在列表中存储了一个或多个艺术家时,我可以通过迭代列表并调用
remove
成功地将他们从绘图中删除。但是,如果我直接存储引用(作为管理绘图的类的属性),则调用
remove
不会做任何事情

作为代码的草图,假设我们有

import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot()
第一个案例是由以下内容生成的

artist_list = list()
for x in range(5):
    line = ax.axhline(x)
    artist_list.append(line)
并且可以通过

for line in artist_list:
    line.remove()
artist_list = list()
(这需要最后一个才能起作用)

而第二个是

line = ax.axhline(1)
line.remove()
不会从绘图中删除线(即使添加了
delline
line=None


似乎将艺术家存储在一个列表中,然后将该变量分配给一个新的空列表,比直接重新分配存储艺术家的变量甚至删除它更彻底。有人知道这是怎么回事吗?如果一行只是存储为
line
而不是存储在列表中,那么如何删除该行呢?

从下面的代码段可以看出,删除一行非常容易。实际上,您只需对相关对象调用
.remove()
,然后重新绘制画布

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.set(title="Click to remove line", xlim=(0,2))

line=ax.axvline(1)

def remove_line(event):
    line.remove()
    fig.canvas.draw()

fig.canvas.mpl_connect("button_press_event", remove_line)

plt.show()

谢谢你的回答,但当我试图解释这实际上不起作用(至少在我描述的上下文中是这样)。正如我在这个答案中所展示的,它确实起作用。也许你的代码不完整?如果您能在出现此问题的地方向我提供一段可运行的代码,我可以帮助您找出问题所在。