用点由s绘制来移动的Python pyplot动画

2024-04-25 23:12:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难用Python制作动画。我的问题是动画一个三维点沿着一定的轨迹移动。我可以通过使用动画模块来实现这一点,并在每一帧重新制作情节(请参见脚本中的第一个选项)。相反,我希望只移动每帧的点位置,而不重新映射所有轴(请参见脚本中的第二个选项)。这是我的剧本:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as an
from mpl_toolkits.mplot3d import Axes3D

# create the parametric curve
t=np.arange(0, 2*np.pi, 2*np.pi/100)
x=np.cos(t)
y=np.sin(t)
z=t/(2.*np.pi)

# create the figure
fig=plt.figure()
ax=fig.gca(projection='3d')

# create the first plot
point=ax.scatter(x[0], y[0], z[0])
line=ax.plot(x, y, z, label='parametric curve')
ax.legend()
ax.set_xlim([-1.5, 1.5])
ax.set_ylim([-1.5, 1.5])
ax.set_zlim([-1.5, 1.5])

# first option - remake the plot at every frame
def update_axes(n, x, y, z, ax):
    ax.cla()
    ax.set_xlim([-1.5, 1.5])
    ax.set_ylim([-1.5, 1.5])
    ax.set_zlim([-1.5, 1.5])
    point=ax.scatter(x[n], y[n], z[n])
    line=ax.plot(x, y, z, label='parametric curve')
    ax.legend()
    return point

ani=an.FuncAnimation(fig, update_axes, 99, fargs=(x, y, z, ax))

# second option - move the point position at every frame
def update_point(n, x, y, z, point):
    point.set_3d_properties(x[n], 'x')
    point.set_3d_properties(y[n], 'y')
    point.set_3d_properties(z[n], 'z')
    return point

#ani=an.FuncAnimation(fig, update_point, 99, fargs=(x, y, z, point))

# make the movie file demo.mp4

writer=an.writers['ffmpeg'](fps=20)
dpi = 100
ani.save('demo.mp4',writer=writer,dpi=dpi)

如果我选择第二个选项(注释第一个FuncAnimation并取消注释第二个FuncAnimation),我将获得仅沿z方向移动的点。有什么建议,我应该做什么,以移动它也在x和y方向?


Tags: theimportanplotas选项createnp