Matplotlib动画删除以前的数据

ma7*_*642 2 python animation matplotlib scatter-plot python-3.x

我正在尝试使用 Matplotlib 制作一个简单的动画来检查我的模拟是否运行良好。我想看看两个粒子如何在 xy 平面上移动:如果代码有效,它们应该吸引并结束在同一点或在空间中接近。

我计算“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()
Run Code Online (Sandbox Code Playgroud)

这可行,但我得到的“动画”包含旧数据点,我只想看到更新的位置。这将使跟踪粒子的位置变得更加容易。如何“擦除”for 循环内每次运行的旧点?有没有办法在每次运行时清除框架?

GPh*_*ilo 6

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()
Run Code Online (Sandbox Code Playgroud)

请注意,我在开始时生成图形和轴(因此它仍然可以在打开的多个窗口下使用)。您也可以使用plt.gca().clear()清除当前轴,但在我看来,这更脆弱并且容易出错。