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