import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from matplotlib import rcParams
# In Windows the next line should provide the full path to convert.exe
# since convert is a Windows command
rcParams['animation.convert_path'] = "C:\Program Files\ImageMagick-6.9.3-Q16\convert.exe"
rcParams['font.size'] = 12
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
plot_args = {'rstride': 3, 'cstride': 1, 'cmap':"Spectral",
'linewidth': 0.1, 'antialiased': True, 'color': 'k',
'shade': True, 'alpha': 0.5}
u = np.linspace(0, 2*np.pi, 30)
v = np.linspace(-1, 1, 30)
c = 1
x = c * np.outer(np.cosh(v/c), np.cos(u))
y = c * np.outer(np.cosh(v/c), np.sin(u))
z = np.outer(v, np.ones_like(u))
surf = ax.plot_surface(x[:, 0], y[:, 0], z[:, 0], **plot_args)
line = ax.plot(x[:, 0], y[:, 0], z[:, 0], 'k', lw=2)
ax.set_xlim(-2, 2)
ax.set_ylim(-2, 2)
ax.set_zlim(-1, 1)
plt.xlabel(r"$x$", fontsize=16)
plt.ylabel(r"$y$", fontsize=16)
ax.set_zlabel(r"$z$", fontsize=16)
def data_gen(num):
surf = ax.plot_surface(x[:, :num], y[:, :num], z[:, :num], **plot_args)
line = ax.plot(x[:, num-1], y[:, num-1], z[:, num-1], 'k', lw=2)
ax.view_init(elev=35, azim=45)
return surf, line
ani = animation.FuncAnimation(fig, data_gen, range(31), blit=False)
ani.save("Catenoid.gif", writer='imagemagick')
plt.show()