1

我已经运行了 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()
4

1 回答 1

3

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

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)

请注意,,它很重要并解包plot返回的列表。

如果要删除此行,只需执行

ln.remove()  # remove the artist
plt.draw()   # force a re-rendering of the canvas (figure) to reflect removal

我不知道您positions[-1]是否有意使用 of,但如果您想强制它是周期性的,请执行

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

如果您真的想将每个段绘制为单独的线,请使用LineCollection,请参阅https://stackoverflow.com/a/17241345/380231示例

于 2013-08-09T00:16:31.750 回答