Quiero hacer animación 3D con matplotlib, pero no sé cómo hacerlo. Aquí está mi código que no funciona.
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='imagemgick') plt.show()
Utilicé este ejemplo http://matplotlib.org/1.4.1/examples/animation/simple_3danim.html y modifiqué su código:
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()