简单的matplotlib动画。
celluloid的Python项目详细描述
赛璐珞
简易matplotlib动画
创建动画应该很容易。 这个模块使你很容易适应你现有的可视化代码来创建动画。
安装
pip install celluloid
手动
遵循以下步骤:
- 创建matplotlib
Figure
,并从中创建Camera
:
fromcelluloidimportCamerafig=plt.figure()camera=Camera(fig)
- 重复使用图形并在创建每个帧后,使用相机拍摄快照。
plt.plot(...)plt.fancy_stuff()camera.snap()
- 捕获所有帧后,创建动画。
animation=camera.animate()animation.save('animation.mp4')
整个module不到50行代码。
示例
最小值
尽可能简单。
frommatplotlibimportpyplotaspltfromcelluloidimportCamerafig=plt.figure()camera=Camera(fig)foriinrange(10):plt.plot([i]*10)camera.snap()animation=camera.animate()
子批次
动画在顶部。
importnumpyasnpfrommatplotlibimportpyplotaspltfromcelluloidimportCamerafig,axes=plt.subplots(2)camera=Camera(fig)t=np.linspace(0,2*np.pi,128,endpoint=False)foriint:axes[0].plot(t,np.sin(t+i),color='blue')axes[1].plot(t,np.sin(t-i),color='blue')camera.snap()animation=camera.animate()
图像
域着色示例。
importnumpyasnpfrommatplotlibimportpyplotaspltfrommatplotlib.colorsimporthsv_to_rgbfromcelluloidimportCamerafig=plt.figure()camera=Camera(fig)forainnp.linspace(0,2*np.pi,30,endpoint=False):x=np.linspace(-3,3,800)X,Y=np.meshgrid(x,x)x=X+1j*Yy=(x**2-2.5)*(x-2.5*1j)*(x+2.5*1j) \ *(x-2-1j)**2/((x-np.exp(1j*a))**2*(x-np.exp(1j*2*a))**2)H=np.angle(y)/(2*np.pi)+.5r=np.log2(1.+np.abs(y))S=(1.+np.abs(np.sin(2.*np.pi*r)))/2.V=(1.+np.abs(np.cos(2.*np.pi*r)))/2.rgb=hsv_to_rgb(np.dstack((H,S,V)))ax.imshow(rgb)camera.snap()animation=camera.animate()
图例
importmatplotlibfrommatplotlibimportpyplotaspltfromcelluloidimportCamerafig=plt.figure()camera=Camera(fig)foriinrange(5):t=plt.plot(range(i,i+5))plt.legend(t,[f'line {i}'])camera.snap()animation=camera.animate()
限制
- 所有绘图的轴限制应相同。动画的界限将是最终情节的界限。
- 图例将从以前的帧中累积。将艺术家传递到
legend
函数以分别绘制他们。
学分
灵感来自plotnine。