在循环中更新 matplotlib 图中的行

Joo*_*oop 0 python matplotlib

我的程序中的特定数据点保持不变。我试图通过迭代更新来适应数据线。我想看看在更新该线路的参数时该线路如何变化(移动)。

具体来说,我正在进行梯度下降,并且试图了解每次更新如何改变线的角度和位置以最适合数据。

现在我得到了这个:

fig = plt.figure()
ax1 = fig.add_subplot(211)
ax1.scatter(xs, ys)
plt.plot(xs, thetas[0] + thetas[1] * xs, color='red')
plt.show()
Run Code Online (Sandbox Code Playgroud)

结果是这样的: 在此输入图像描述

正如你所看到的,我也很难绘制一条连续的线。现在我需要更新红线。有任何想法吗?thetas[0]并且thetas[1]是 for 循环中的更新,之后绘图也需要更新..

小智 5

您需要使用 matplotlib 的交互模式(请参阅文档)。

特别是,您需要使用 plt.ion() 打开交互模式,fig.canvas.draw() 使用最新的更改更新画布,并使用 ax.clear() 删除之前绘制的内容。

你的代码看起来像:

plt.ion()
fig = plt.figure()
ax1 = fig.add_subplot(211)
ax1.scatter(xs, ys)
plt.plot(xs, thetas[0] + thetas[1] * xs, color='red')
# Draw.
fig.canvas.draw()

# Do your updates on thetas.
# ...

# Clear the current plot.
ax1.clear()
# Plot your data again.
ax1.scatter(xs, ys)
plt.plot(xs, thetas[0] + thetas[1] * xs, color='red')
# Update the figure.
fig.canvas.draw()
Run Code Online (Sandbox Code Playgroud)