麻烦在python中制作3D绘图的动画

问题描述 投票:0回答:1

我试图在3D中制作曲线动画并遇到麻烦。我成功地用二维动画制作了一些东西,所以我想我知道自己在做什么。在下面的代码中,我将参数化生成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()
python matplotlib 3d jquery-animate
1个回答
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()
© www.soinside.com 2019 - 2024. All rights reserved.