如何在Python的matplotlib中删除上一个图形?

如何在Python的matplotlib中删除上一个图形?,python,matplotlib,plot,Python,Matplotlib,Plot,我已经运行了3个Python脚本,每个脚本都在绘图中生成了一条曲线 每条曲线由数百条小线段组成 因此,每条曲线由一系列plot()绘制,而不是一条 但所有这些plot()共享相同的参数(例如,一条曲线的颜色、样式是一致的) 因此,我认为仍然可以轻松删除由特定脚本绘制的所有片段 我发现最近运行的脚本生成的曲线是错误的。因此,我希望删除它。但与此同时,我不能仅仅关上窗户,重新绘制一切。我希望保留所有其他曲线 我该怎么做 更新:打印代码 for i, position in enumerate(pos

我已经运行了3个Python脚本,每个脚本都在绘图中生成了一条曲线

每条曲线由数百条小线段组成

因此,每条曲线由一系列
plot()
绘制,而不是一条

但所有这些
plot()
共享相同的参数(例如,一条曲线的颜色、样式是一致的)

因此,我认为仍然可以轻松删除由特定脚本绘制的所有片段

我发现最近运行的脚本生成的曲线是错误的。因此,我希望删除它。但与此同时,我不能仅仅关上窗户,重新绘制一切。我希望保留所有其他曲线

我该怎么做

更新:打印代码

for i, position in enumerate(positions):
    if i == 0:
        plt.plot([0,0], [0,0], color=COLOR, label=LABEL)
    else:
        plt.plot([positions[i - 1][0], position[0]], [positions[i - 1][1], position[1]], STYLE, color=COLOR)

#plt.plot([min(np.array(positions)[:,0]), max(np.array(positions)[:,0])], [0,0], color='k', label='East') # West-East
#plt.plot([0,0], [min(np.array(positions)[:,1]), max(np.array(positions)[:,1])], color='k', label='North') # South-North

plt.gca().set_aspect('equal', adjustable='box')

plt.title('Circle Through the Lobby 3 times', fontsize=18)
plt.xlabel('x (m)', fontsize=16)
plt.ylabel('y (m)', fontsize=16)
plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))
plt.draw()

我认为您的整个循环可以替换为:

pos = np.vstack(positions) # turn your Nx2 nested list -> Nx2 np.ndarray
x, y = pos.T # take the transpose so 2xN then unpack into x and y
ln, = plt.plot(x, y, STYLE, color=COLOR, label=LABEL)
注意
这一点很重要,并解压缩
绘图返回的列表

如果要删除此行,请执行以下操作

ln.remove()  # remove the artist
plt.draw()   # force a re-rendering of the canvas (figure) to reflect removal
我不知道你是否有意使用
位置[-1]
,但如果你想强制它是周期性的,那就这样做吧

pos = np.vstack(positions + positions[:1])

如果确实要将每个线段绘制为一条重新创建的线,请使用
LineCollection
,请参见示例

包括您的代码。到目前为止,我们所能做的就是猜测您是如何绘制数据的。@nordev谢谢您的建议!参见编辑的PLZ一些位置示例数据也会有所帮助。但是,为什么要迭代这些点来绘制它们呢。matplotlib有很多功能,除了可能希望每条线段都有不同的参数外,这些参数似乎与代码所做的不同。根据运行脚本所使用的接口/环境,在启动脚本之前,可能需要一个plt.clf()。@Joop否,实际上它们的参数都是相同的。我进行迭代的唯一原因是我是Python的新手。因此,仍然不清楚如何在Python中实现这一点。你能给我一些建议吗?就像用一行代码绘制整条曲线一样,MatPlotLib有一个很棒的网站,上面有非常强大的示例。简单示例:查看其余的示例,所有示例都附带了工作代码。绘图部分的工作非常神奇。但是在某种程度上,删除操作不起作用,您可能需要在
remove
之后调用
plt.draw()
!令人惊叹的!我真的很感谢你的帮助!:)