Animation#
You can use animation
class of matplotlib
to show animations.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import animation
After downloading the code, please uncomment the line %matplotlib notebook
to see animations.
%matplotlib inline
#%matplotlib notebook
FuncAnimation#
It is often helpful to visualize the data while they are computed, rather than after all computations are done.
For that, you can define a function to draw each frame, and pass the function to FuncAnimation
.
def pendulum(i, clear=True, dt=0.05):
"""swinging pendulum. i:frame number"""
# clear previous plot
if clear:
plt.cla()
# swinging pendulum
l = 1 # length
th = np.sin(np.pi*i*dt) # angle, 2 sec period
x = np.sin(th)
y = -np.cos(th)
# draw a new plot
pl = plt.plot([0, x], [0, y], 'b')
plt.axis('square')
plt.xlim(-1.2*l, 1.2*l)
plt.ylim(-1.2*l, 1.2*l)
return pl # for saving
fig = plt.figure()
anim = animation.FuncAnimation(fig, pendulum, frames=40, interval=50)
![_images/8ca55729c4bbb9c599dfa8e7fb73f7796b52815f42a64524979eff0849b006b1.png](_images/8ca55729c4bbb9c599dfa8e7fb73f7796b52815f42a64524979eff0849b006b1.png)
ArtistAnimation#
You can alternatively save all frames in an array and animate at once.
fig = plt.figure()
frames = [] # prepare frames
for i in range(40):
art = pendulum(i, False)
# append to the frame
frames.append(art)
anim = animation.ArtistAnimation(fig, frames, interval=50)
![_images/269e93d7ba35ec850ed10383f39a8b0a73ca5f5ceb34b16bfc1b8216f37b5f0e.png](_images/269e93d7ba35ec850ed10383f39a8b0a73ca5f5ceb34b16bfc1b8216f37b5f0e.png)
You can save the movie in a motion gif file.
anim.save("pend.gif", writer='pillow')
Here is the saved file pend.gif
: