2016-06-30 8 views
2

matplotlibで3Dアニメーションを作りたいのですが、どうすればよいかわかりません。ここに私の非動作コードがあります。matplotlibを使用した3Dアニメーション

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() 

答えて

4
私はこの例 http://matplotlib.org/1.4.1/examples/animation/simple_3danim.html を使用して、あなたのコードを修正

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

fig = plt.figure() 
ax = p3.Axes3D(fig) 

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() 
+0

感謝を!今、私は私が知らないことを理解しています。 – Yuto

関連する問題