本文介绍了使用 matplotlib 的 3D 动画的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想用 matplotlib 制作 3D 动画,但我不知道怎么做.这是我的非工作代码.
from matplotlib import pyplot as plt将 numpy 导入为 np从 mpl_toolkits.mplot3d 导入 Axes3D从 matplotlib 导入动画从数学导入 *fig = plt.figure()ax = fig.add_subplot(111) #,projection='3d'#环境ax.set_xlim(-5,5)ax.set_ylim(-5,5)#ax.set_zlim(-5,5)ax.set_xlabel('x')ax.set_ylabel('y')#ax.set_zlabel('z')ax.grid()f1, = ax.plot([], [], "r-", lw=1) #plot1定义生成():对于 np.linspace(0,2*pi,100) 中的 phi:产量 np.cos(phi), np.sin(phi), phi定义更新(数据):p1, q1, psi = 数据f1.set_data(p1,q1)#f1.set_3d_properties(psi)ani = animation.FuncAnimation(fig, update, gen, blit=False, interval=100, repeat=True)#ani.save('matplot003.gif', writer='imagemagick')plt.show()
解决方案
我使用了这个例子
I want to make 3D animation with matplotlib, but I don't know how to. Here is my non-working code.
from matplotlib import pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import animation
from math import *
fig = plt.figure()
ax = fig.add_subplot(111) #, projection='3d'
#setting
ax.set_xlim(-5,5)
ax.set_ylim(-5,5)
#ax.set_zlim(-5,5)
ax.set_xlabel('x')
ax.set_ylabel('y')
#ax.set_zlabel('z')
ax.grid()
f1, = ax.plot([], [], "r-", lw=1) #plot1
def gen():
for phi in np.linspace(0,2*pi,100):
yield np.cos(phi), np.sin(phi), phi
def update(data):
p1, q1, psi = data
f1.set_data(p1,q1)
#f1.set_3d_properties(psi)
ani = animation.FuncAnimation(fig, update, gen, blit=False, interval=100, repeat=True)
#ani.save('matplot003.gif', writer='imagemagick')
plt.show()
解决方案
I used this example http://matplotlib.org/1.4.1/examples/animation/simple_3danim.htmland modified your code:
from matplotlib import pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import animation
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
def gen(n):
phi = 0
while phi < 2*np.pi:
yield np.array([np.cos(phi), np.sin(phi), phi])
phi += 2*np.pi/n
def update(num, data, line):
line.set_data(data[:2, :num])
line.set_3d_properties(data[2, :num])
N = 100
data = np.array(list(gen(N))).T
line, = ax.plot(data[0, 0:1], data[1, 0:1], data[2, 0:1])
# Setting the axes properties
ax.set_xlim3d([-1.0, 1.0])
ax.set_xlabel('X')
ax.set_ylim3d([-1.0, 1.0])
ax.set_ylabel('Y')
ax.set_zlim3d([0.0, 10.0])
ax.set_zlabel('Z')
ani = animation.FuncAnimation(fig, update, N, fargs=(data, line), interval=10000/N, blit=False)
#ani.save('matplot003.gif', writer='imagemagick')
plt.show()
这篇关于使用 matplotlib 的 3D 动画的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!