Matplotlib 动画擦除之前的数据
Matplotlib animation erase previous data
我正在尝试使用 Matplotlib 制作一个简单的动画来检查我的模拟 运行 是否正常。我想看看两个粒子如何在 x-y 平面上移动:如果代码有效,它们应该吸引并在同一点结束或在 space 中关闭。
我计算粒子在 'for' 循环内的位置,每次我得到位置,我使用 plt.scatter(x, y) 绘制它们,其中 x 和 y 是位置在时间 t = t + dt。我在网上看到我可以在循环中写 plt.pause(0.05) ,这将产生我正在寻找的简单动画。
我的代码示例如下:
import numpy as np
import matplotlib.pyplot as plt
for k in range(steps):
pos = computeNewPos(pos, vel, force)
plt.scatter(pos[0, 0], pos[0, 1], label = '1', color = 'r')
plt.scatter(pos[1, 0], pos[1, 1], label = '2', color = 'b')
plt.xlabel('X')
plt.ylabel('Y')
plt.pause(0.05)
plt.show()
这有效,但我得到的 'animation' 包含旧数据点,我只想看到更新后的位置。这将使跟踪粒子的位置变得更加容易。我如何 'erase' for 循环中每个 运行 的旧点?有没有办法在每个 运行 时清除框架?
最简单的解决方案(如果不是最有效的话)是在重绘之前用 axis.clear()
擦除轴:
fig, ax = plt.subplots()
for k in range(steps):
pos = computeNewPos(pos, vel, force)
ax.clear()
ax.scatter(pos[0, 0], pos[0, 1], label = '1', color = 'r')
ax.scatter(pos[1, 0], pos[1, 1], label = '2', color = 'b')
ax.xlabel('X')
ax.ylabel('Y')
plt.pause(0.05)
plt.show()
请注意,我在开始时生成图形和轴(因此它仍然可以打开多个 windows)。您也可以使用 plt.gca().clear()
清除当前轴,但 IMO 更脆弱且容易出错。
我正在尝试使用 Matplotlib 制作一个简单的动画来检查我的模拟 运行 是否正常。我想看看两个粒子如何在 x-y 平面上移动:如果代码有效,它们应该吸引并在同一点结束或在 space 中关闭。
我计算粒子在 'for' 循环内的位置,每次我得到位置,我使用 plt.scatter(x, y) 绘制它们,其中 x 和 y 是位置在时间 t = t + dt。我在网上看到我可以在循环中写 plt.pause(0.05) ,这将产生我正在寻找的简单动画。
我的代码示例如下:
import numpy as np
import matplotlib.pyplot as plt
for k in range(steps):
pos = computeNewPos(pos, vel, force)
plt.scatter(pos[0, 0], pos[0, 1], label = '1', color = 'r')
plt.scatter(pos[1, 0], pos[1, 1], label = '2', color = 'b')
plt.xlabel('X')
plt.ylabel('Y')
plt.pause(0.05)
plt.show()
这有效,但我得到的 'animation' 包含旧数据点,我只想看到更新后的位置。这将使跟踪粒子的位置变得更加容易。我如何 'erase' for 循环中每个 运行 的旧点?有没有办法在每个 运行 时清除框架?
最简单的解决方案(如果不是最有效的话)是在重绘之前用 axis.clear()
擦除轴:
fig, ax = plt.subplots()
for k in range(steps):
pos = computeNewPos(pos, vel, force)
ax.clear()
ax.scatter(pos[0, 0], pos[0, 1], label = '1', color = 'r')
ax.scatter(pos[1, 0], pos[1, 1], label = '2', color = 'b')
ax.xlabel('X')
ax.ylabel('Y')
plt.pause(0.05)
plt.show()
请注意,我在开始时生成图形和轴(因此它仍然可以打开多个 windows)。您也可以使用 plt.gca().clear()
清除当前轴,但 IMO 更脆弱且容易出错。