本文介绍一个正弦余弦波案例来展示jupyter生成动画过程,首先电脑安装一个叫做ffmpeg的软件,只有40M,是一个关于网页制作动画的软件。安装过程见博客:(15条消息) 安装ffmpeg并写入jupyter matplotlib_山晨啊8的博客-CSDN博客
第一步:创建一个画布
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# create a figure and axes
fig = plt.figure(figsize=(12,5))
ax1 = plt.subplot(1,2,1)
ax2 = plt.subplot(1,2,2)
# set up the subplots as needed
ax1.set_xlim(( 0, 2))
ax1.set_ylim((-2, 2))
ax1.set_xlabel('Time')
ax1.set_ylabel('Magnitude')
ax2.set_xlim((-2,2))
ax2.set_ylim((-2,2))
ax2.set_xlabel('X')
ax2.set_ylabel('Y')
ax2.set_title('Phase Plane')
# create objects that will change in the animation. These are
# initially empty, and will be given new values for each frame
# in the animation.
txt_title = ax1.set_title('')
line1, = ax1.plot([], [], 'b', lw=2) # ax.plot returns a list of 2D line objects
line2, = ax1.plot([], [], 'r', lw=2)
pt1, = ax2.plot([], [], 'g.', ms=20)
line3, = ax2.plot([], [], 'y', lw=2)
ax1.legend(['sin','cos']);
第二步:定义动画的每一帧(n是一个可迭代对象,随着对象变化,帧也在变化)
def drawframe(n):
x = np.linspace(0, 2, 1000)
y1 = np.sin(2 * np.pi * (x - 0.01 * n))
y2 = np.cos(2 * np.pi * (x - 0.01 * n))
line1.set_data(x, y1)
line2.set_data(x, y2)
line3.set_data(y1[0:50],y2[0:50])
pt1.set_data(y1[0],y2[0])
txt_title.set_text('Frame = {0:4d}'.format(n))
return (line1,line2)
第三步:定义动画对象animation
def drawframe(n):
x = np.linspace(0, 2, 1000)
y1 = np.sin(2 * np.pi * (x - 0.01 * n))
y2 = np.cos(2 * np.pi * (x - 0.01 * n))
line1.set_data(x, y1)
line2.set_data(x, y2)
line3.set_data(y1[0:50],y2[0:50])
pt1.set_data(y1[0],y2[0])
txt_title.set_text('Frame = {0:4d}'.format(n))
return (line1,line2)
第四步:调用animation动画对象在HTML上生成动画
from IPython.display import HTML
HTML(anim.to_html5_video())
其中在anim.to_html5_video函数中调用了ffmpeg软件。如果出现了找不到ffmpeg drive的错误,可以考虑重装matplotlib,具体见
(15条消息) 安装ffmpeg并写入jupyter matplotlib_山晨啊8的博客-CSDN博客
参考:https://jckantor.github.io/CBE30338/A.03-Animation-in-Jupyter-Notebooks.html