参考链接:https://blog.csdn.net/theonegis/article/details/51037850

补充:

  若是有多个操作对象,animate里不返回也是可以的;

#缩进没有严格
def animate(fi):
# bars=[]
for i in range(algorithm_num):
if len(frames_names[algorithm_list[i].__name__])>fi: for rect,yi in zip(frames_names['bar%s'%algorithm_list[i].__name__],frames_names[algorithm_list[i].__name__][fi]):
rect.set_height(yi.value)
rect.set_color(yi.color)
anim=animation.FuncAnimation(fig,animate,frames=max(list(map(int,list(frame_count.values())) )),interval=frame_interval,repeat=True)

  

官方文档:https://matplotlib.org/3.1.0/api/_as_gen/matplotlib.animation.FuncAnimation.html

  我们可以使用Matplotlib的animation类的FuncAnimation()方法来制作动画,只需要提供一个动态更新数据的函数

  需要注意的是,这个函数需要以元组的形式返回一个需要在下一次绘图中更新的数据

一个拥有详细解释的实例的链接:http://codingpy.com/article/drawing-gifs-with-matplotlib

有两点需要注意

  1. 图里的散点部分是不变的;变的是直线
  2. X 轴的标题每一帧都在变化
import numpy as np
import matplotlib as plt
from matplotlib import animation plt.fig,ax=plt.subplots()
plt.fig.set_tight_layout(True)#tight:紧的;layout:布局
#DPI:每英寸的点数
#获取图片的分辨率和尺寸
#在保存图片时,还需要另外指明图片的DPI
print('图片的分辨率尺寸是{0}DPI,size in inches is {1}'.format(plt.fig.get_dpi(),plt.fig.get_size_inches()))#inches:英寸 #画出一个维持不变的散点图和一开始的那条直线
#困难的问题从约定俗成的方法去解决,不如先不管多么复杂的图像,第一步就是创建点的集合
X=np.arange(0,20,0.1)
ax.scatter(X,X+np.random.normal(0,3.0,len(X)))#这种方法很好啊
line,=plt.plot(X,X-0.5,'r-',linewidth=2)
plt.title('Interesting Graph',fontsize='large',fontweight='bold',verticalalignment='center')#设置标题位置不起作用
def update(i):
label='timestep{0}'.format(i)
print(label)
#更新直线和X轴,使用一个新的X轴的标签
#以元组的形式返回在这一帧需要被更新的物体
line.set_ydata(X-5+i)
ax.set_label(label)
return ax,line if __name__=='__main__':
#FuncAnimation会在每一帧都调用update函数
#在这里设置一个10帧的动画,每帧之间间隔200ms
anim=animation.FuncAnimation(plt.fig,update,frames=np.arange(0,10),interval=200)#frame:帧
#我知道问什么这里提示figundefine了,因为前面的fig在函数中声明的
plt.show()

  

  

FuncAnimation方法的一些参数:

  fig:对象

  update:以元组形式返回这一帧需要被重新绘图物体的一个函数

  frames:帧数

  interval:每帧之间的间隔,以毫秒为单位

保存

如果你想用matplotlib的save方法渲染GIF图的话,就必须安装ImageMagick

ageMagick是一个免费的创建、编辑、合成图片的软件。它可以读取、转换、写入多种格式的图片

anim.save('line.gif', dpi=80, writer='imagemagick')

  

其他的:

记得要掌握一些知识点约定俗称的步骤,如使用matplotlib画图,无论多么复杂,第一步都是构造点的集合np.arange或者random.normal(),或者曲线np.linspace(),尤其是面对新的问题,这样做就显得特别重要

问题:

  1)无法显示title

  2)导入seaborn包没有用(已解决)

  

import seaborn as sns
sns.set_style('whitegrid')

  

Python 绘图与可视化 matplotlib 制作Gif动图的更多相关文章

  1. Python 绘图与可视化 matplotlib(下)

    详细的参考链接:更详细的:https://www.cnblogs.com/zhizhan/p/5615947.html 图像.子图.坐标轴以及记号 Matplotlib中图像的意思是打开的整个画图窗口 ...

  2. Python 绘图与可视化 matplotlib(上)

    参考链接:https://www.cnblogs.com/dudududu/p/9149762.html 更详细的:https://www.cnblogs.com/zhizhan/p/5615947. ...

  3. Python 绘图与可视化 matplotlib 动态条形图 bar

    bar的参考链接:https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.bar.html 第一种办法 一种方法是每次都重新画,包括清除f ...

  4. Python 绘图与可视化 matplotlib text 与transform

    Text 为plots添加文本或者公式,反正就是添加文本了 参考链接:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.text.html#ma ...

  5. Python 绘图与可视化 matplotlib 散点图、numpy模块的random()

    效果: 代码: def scatter_curve(): # plt.subplot(1,1,1) n=1024 X=np.random.normal(0,1,n) Y=np.random.norma ...

  6. Python 绘图与可视化 matplotlib 填充fill和fill_between

    参考链接:https://blog.csdn.net/You_are_my_dream/article/details/53457960 fill()填充函数曲线与坐标轴之间的区域: x = np.l ...

  7. 实用的Python(2)利用Python制作gif动图

    一.简介 moviepy是一个专门用于视频剪辑制作的模块,可以自动化完成很多繁琐的视频剪辑处理工作,除了处理视频数据之外,moviepy中还内置了可以制作gif动图的功能,通过使用moviepy.ed ...

  8. PS制作gif动图以及背景透明与消除残影

    摘要: 用Photoshop制作gif动画的要点:在窗口菜单中找到“时间轴”选中打开时间轴,单击一帧,设置该帧显示持续时间在图层里将该帧要显示的图层显示,并将不该显示的层隐藏,新建一帧,接下来就是重复 ...

  9. Python绘图与可视化

    Python有很多可视化工具,本篇只介绍Matplotlib. Matplotlib是一种2D的绘图库,它可以支持硬拷贝和跨系统的交互,它可以在Python脚本.IPython的交互环境下.Web应用 ...

随机推荐

  1. OOA,OOD,OOP区别

    定义: OOA(Object-Oriented Analysis,面向对象分析方法) OOD(Object-Oriented Design,面向对象设计) OOP(Object Oriented Pr ...

  2. BA-siemens-BA模块特性

    PXC24(包含UEC24的模块特性) DO点可以接220vac的电压,渠道人员告知电流不要超过2A AO点只能输出0-10V的电压,不能输出4-20ma的电流,说明书上是错误的 AO点输出10v失败 ...

  3. clipper库使用的一些心得

    clipper sourceforge官网:http://sourceforge.net/projects/polyclipping/ 1. 版本号差异 之前project里面使用4.8.6,近期升级 ...

  4. audio_coding模块分析和audio_conference_mixer模块分析

    audio_coding 1. 主要接口      AudioCodingModuleImpl::RegisterReceiveCodec 初始化Codec      AudioCodingModul ...

  5. tensorflow利用预训练模型进行目标检测(一):安装tensorflow detection api

    一.tensorflow安装 首先系统中已经安装了两个版本的tensorflow,一个是通过keras安装的, 一个是按照官网教程https://www.tensorflow.org/install/ ...

  6. 0x22 迭代加深

    poj2248 真是个新套路.还有套路剪枝...大到小和判重 #include<cstdio> #include<iostream> #include<cstring&g ...

  7. 【为小白菜打call】

    作为本校的竞赛生,我必须为我大OJ打call caioj,小白菜oj,顾名思义,就是为刚踏进OI的“小白菜”们准备的网站,里面包含了许多专题内容,各种模版和讲解视频 而且对于刚学习C++的同学,更有帮 ...

  8. nyoj--99--单词拼接(欧垃图判定+输出)

    单词拼接 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描述 给你一些单词,请你判断能否把它们首尾串起来串成一串. 前一个单词的结尾应该与下一个单词的道字母相同. 如 alo ...

  9. 树状数组(Binary Indexed Tree(BIT))

    先不说别的,这个博客为我学习树状数组提供了很大帮助,奉上传送门 http://blog.csdn.net/int64ago/article/details/7429868 然后就说几个常用的操作 in ...

  10. 杂项-公司:Altera

    ylbtech-杂项-公司:Altera 自二十年前发明世界上第一个可编程逻辑器件开始,Altera公司(阿尔特拉)(NASDAQ:ALTR)秉承了创新的传统,是世界上“可编程芯片系统”(SOPC)解 ...