在 python 中制作 3D 绘图动画时遇到问题
Trouble animating a 3D plot in python
我正在尝试制作 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()
好的,我终于让它工作了。我有一个愚蠢的错误 (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()
我正在尝试制作 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()
好的,我终于让它工作了。我有一个愚蠢的错误 (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()