在python中为3D图制作动画时遇到问题

时间:2018-11-02 16:05:06

标签: python matplotlib 3d jquery-animate

我正在尝试对3D曲线进行动画处理,遇到了一些麻烦。我已经成功地用2D动画制作了一些东西,所以我以为我知道自己在做什么。在下面的代码中,我以参数方式生成x,y和z值以形成螺旋,并验证了可以在3D中绘制完整曲线。为了使曲线动起来,我尝试从仅绘制前两个数据点开始,然后使用FuncAnimation更新数据,以便绘制更大的数据部分。但是正如我说的,由于某种原因它没有工作,我也不知道为什么。我得到的只是带有前两个数据点的初始图。任何帮助将不胜感激。

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

t_max = 10
steps = 100
t = np.linspace(0, t_max, steps)
x = np.cos(t)
y = np.sin(t)
z = 0.1*t

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
line, = ax.plot(x[0:1], y[0:1], z[0:1])

def update(i):
    line.set_xdata(x[0:i])
    line.set_ydata(y[0:i])
    line.set_zdata(z[0:i])
    fig.canvas.draw()

ani = animation.FuncAnimation(fig, update, frames=t, interval=25, blit=False)
plt.show()

1 个答案:

答案 0 :(得分:0)

好吧,我终于使它开始工作了。我有一个愚蠢的错误(frames = t),但也发现您需要以不同的方式在更新函数中设置数据。这是工作代码,以防有人感兴趣。

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

t_max = 10
steps = 100
t = np.linspace(0, t_max, steps)
x = np.cos(t)
y = np.sin(t)
z = 0.1*t

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
line, = ax.plot([], [], [], lw=1)
ax.set_xlim(-1,1)
ax.set_ylim(-1,1)
ax.set_zlim(0,1)
plt.show()

def update(i):
    line.set_data(x[0:i], y[0:i])
    line.set_3d_properties(z[0:i])
    return

ani = animation.FuncAnimation(fig, update, frames=100, interval=10, blit=True)
plt.show()