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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了麻烦在python中制作3D绘图的动画相关的知识,希望对你有一定的参考价值。

我试图在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()
答案

好的,我终于开始工作了。我有一个愚蠢的错误(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()

以上是关于麻烦在python中制作3D绘图的动画的主要内容,如果未能解决你的问题,请参考以下文章

3D制图软件有那几种

Python 和 Matplotlib:在 Jupyter Notebook 中制作交互式 3D 绘图

python怎么可视化

专业3D绘图设计软件用啥软件?

如何使用 python/matplotlib 为 3d 绘图设置“相机位置”?

L7-14 3D图形