我试图使用matplotlib在3D散点动画中绘制粒子。我尝试修改官方的3D线条动画示例来实现这一点。然而,我的代码没有使点运动,而是一次性呈现了它们。我无法弄清楚问题所在。非常感谢任何帮助或提示。
最小可重现示例:
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d.axes3d as p3
import matplotlib.animation as animation
import numpy as np
def Gen_RandPrtcls():
n = 10
x = np.random.normal(size=(n,3))*5
# m = np.repeat(1. / n, n)
# Computing trajectory
data = [x]
nbr_iterations = 300
for iteration in range(nbr_iterations):
# data.append(data[-1] + GravAccel(data[-1], m))
data.append(data[-1]*1.01)
return data
def update_prtcls(num, dataPrtcls, parts):
for prtcl, data in zip(parts, dataPrtcls):
# NOTE: there is no .set_data() for 3 dim data...
prtcl.set_data(data[:num][:,0:1])
prtcl.set_3d_properties(data[:num][:,2])
return parts
# Attaching 3D axis to the figure
fig = plt.figure()
ax = p3.Axes3D(fig)
# Fifty parts of random 3-D parts
data = Gen_RandPrtcls()
# NOTE: Can't pass empty arrays into 3d version of plot()
parts = [ax.plot(dat[:,0], dat[:,1], dat[:,2], marker='.', linestyle="None")[0] for dat in data]
# Setting the axes properties
ax.set_xlim3d([-10.0, 10.0])
ax.set_xlabel('X')
ax.set_ylim3d([-10.0, 10.0])
ax.set_ylabel('Y')
ax.set_zlim3d([-10.0, 10.0])
ax.set_zlabel('Z')
ax.set_title('3D Test')
# Creating the Animation object
prtcl_ani = animation.FuncAnimation(fig, update_prtcls, 25, fargs=(data, parts),
interval=50, blit=False)
plt.show()