如何在 Matplotlib 中为散点图制作动画?

matplotlibserver side programmingprogramming更新于 2025/5/11 9:37:17

使用 matplotlib 的 FuncAnimation 方法,我们可以为图表制作动画。我们可以传递一个用户定义的方法,在其中我们将改变粒子的位置,最后,我们将返回绘图类型。

步骤

  • 获取粒子的初始位置、速度、力和大小。

  • 创建一个新图形,或使用 figsize = (7, 7) 激活现有图形。

  • 使用 xlim 和 ylim 向当前图形添加轴并使其成为当前轴。

  • 绘制粒子初始位置的散点图。

  • 通过反复调用函数 *func* 制作动画。我们可以将一个有助于改变粒子位置的用户定义方法传递到 FuncAnimation 类中。

  • 使用 plt.show() 显示图形。

示例

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import numpy as np

dt = 0.005
n=20
L = 1
particles=np.zeros(n,dtype=[("position", float , 2),
                           ("velocity", float ,2),
                           ("force", float ,2),
                           ("size", float , 1)])

particles["position"]=np.random.uniform(0,L,(n,2));
particles["velocity"]=np.zeros((n,2));
particles["size"]=0.5*np.ones(n);

fig = plt.figure(figsize=(7,7))
ax = plt.axes(xlim=(0,L),ylim=(0,L))
scatter=ax.scatter(particles["position"][:,0], particles["position"][:,1])

def update(frame_number):
   particles["force"]=np.random.uniform(-2,2.,(n,2));
   particles["velocity"] = particles["velocity"] + particles["force"]*dt
   particles["position"] = particles["position"] + particles["velocity"]*dt

   particles["position"] = particles["position"]%L
   scatter.set_offsets(particles["position"])
   return scatter,

anim = FuncAnimation(fig, update, interval=10)
plt.show()

输出


相关文章