前言

这段时间要做一个涉及排队论的数学建模,需要动态绘图。建好了模,却没想到在原以为简单的绘图上耗费了我大量时间。原因在于用python作动态绘图的参考资料过于琐碎。因此在我费了九牛二虎之力终于实现动态图的绘制并保存为gif动画后,我决定写下这篇博文,给这段时间踩过的一个个坑立个碑,也为后来者们提个醒

文章目录

前言

一. 动态图示例

二. 在pycharm上呈现动态图

三. 动态图的绘制

方法一:调用matplotlib中库

例子:正弦曲线绘制

方法二:使用for循环

四. 动态图的保存

1. 保存为html格式

2. 保存为gif格式

3. 保存为MP4格式

3.1 用imagemagick保存

3.2 用python库保存

五. 总结

一. 动态图示例

衰减振荡曲线

正弦波

更多例子请看官方文档

官方举例:贝叶斯曲线

官方文档 进入后下拉查看example

二. 在pycharm上呈现动态图

python中有两种图像呈现方式:

控制台绘图:方便保存输出记录(如将IPython 终端输出转换成 Html 文件),但无法动态绘图(大大的缺点)。

弹出窗绘图:可以交互式的放大、拖动图片,可进行动态绘图,并且能将图片保存成不同的格式。

而pycharm默认的呈现方式是控制台绘图,因此需要作一下设置

呈现效果如下图所示

三. 动态图的绘制

动态绘图的本质就是,反复的调用一个函数或执行一串代码,每次执行就生成一幅图,覆盖掉之前的图像,呈现“动态”效果

方法一:调用matplotlib中库

from matplotlib.animation import FuncAnimation

用该函数创建一个类:

ani = animation.FuncAnimation(fig, func, frames=None, init_func=None, fargs=None, save_count=None, *, cache_frame_data=True, **kwargs)

#然后直接plt.show()就可以

plt.show()

主要参数解释

fig:窗口画布,用 fig, ax = plt.subplots() 生成

func:要反复调用的函数(至少要传入一个参数),用该函数生成、更改图像

frames:向要调用的函数传递的参数(默认依次传入0,1,2,3…)

init_func:用于给定图像初始信息的函数

更多信息请参考官方文档,里面对参数含义的说明要详细的多

例子:正弦曲线绘制

import numpy as np

import matplotlib.pyplot as plt

import matplotlib.animation as animation

fig, ax = plt.subplots()

x = np.arange(0, 2*np.pi, 0.01)

line, = ax.plot(x, np.sin(x))

#定义init_func,给定初始信息

def init(): # only required for blitting to give a clean slate.

line.set_ydata([np.nan] * len(x))

return line,

#定义func,用来反复调用的函数

def animate(i):

line.set_ydata(np.sin(x + i / 100)) # 跟随自变量的增加更新y值

return line,

ani = animation.FuncAnimation(

fig, animate, init_func=init, interval=2, blit=True, save_count=50)

plt.show()

更多信息请看官方文档:官方文档:matplotlib.animation.FuncAnimation

方法二:使用for循环

请参考下面这篇文章,可以仿照它用for循环实现动态绘制

Python使用matplotlib画动态图

for循环实现动态绘制的缺点:不容易用python代码保存为gif等格式

四. 动态图的保存

1. 保存为html格式

保存为HTML格式,是不需要安装额外软件的

导入模块加上这一条:

from matplotlib.animation import HTMLWriter

最后加上这一条:

mywriter = HTMLWriter(fps=60)

ani.save('myAnimation.html',writer=mywriter)

2. 保存为gif格式

保存为gif格式,需要下载一个imagemagick软件,找了我好久才找到软件来源imagemagick

下载的是dll,下载到任何文件夹下应该都可以。我安装在了python安装程序文件夹下。

代码部分相当简单,只需要在最后加一条:

ani.save('decay.gif',writer='imagemagick',fps=30)

3. 保存为MP4格式

3.1 用imagemagick保存

如果下了imagemagick,里面自带了ffmpeg的dll,那么也只需要在最后加一条:

ani.save('decay.gif',writer='ffmpeg',fps=30)

3.2 用python库保存

如果不像下imagemagick,可以这么做:

from matplotlib.animation import FFMpegWriter

并在最后加上:

mywriter = FFMpegWriter(fps=60)

ani.save('myAnimation.MP4',writer=mywriter)

五. 总结

python动态图绘制+保存整整弄了我4个半天(加上写这篇博文共5个),资料从国内网站找到国外。没有这方面系统的教程恰恰说明了python并不擅长做这个也不常用来做这个。其实相比起python,MATLAB在动态绘图上简直不知道方便了多少倍,因此如果可以的话,还是用MATLAB做动态绘图吧

python简单动态图_python动态图的绘制和保存相关推荐

  1. python动态横道图_python的matplotlib.pyplot绘制甘特图

    博主本来就想简单地找一下代码,画一幅甘特图,结果百度之后发现甘特图的代码基本都不是用matplotlib库,但是像柱状图等统计图通常都是用这个库进行绘制的,所以博主就花了一些时间,自己敲了一份代码,简 ...

  2. python是高级动态语言_Python动态语言之魅力揭秘

    之前的文章跟大家讲解了鸭子类型,其实鸭子类型是编程语言中动态类型语言中的一种设计风格.今天跟大家一起谈谈动态语言的魅力. 根据维基百科,动态编程语言是这样子定义的:动态编程语言是高级编程语言的一个类别 ...

  3. python 简单检索器_python实现文件搜索工具(简易版)

    在python学习过程中有一次需要进行GUI 的绘制, 而在python中有自带的库tkinter可以用来简单的GUI编写,于是转而学习tkinter库的使用. 学以致用,现在试着编写一个简单的磁文件 ...

  4. python简单的预测模型_python简单预测模型

    python简单预测模型 步骤1:导入所需的库,读取测试和训练数据集. #导入pandas.numpy包,导入LabelEncoder.random.RandomForestClassifier.Gr ...

  5. python3d动图_python中Matplotlib实现绘制3D图的示例代码

    Matplotlib 也可以绘制 3D 图像,与二维图像不同的是,绘制三维图像主要通过 mplot3d 模块实现.但是,使用 Matplotlib 绘制三维图像实际上是在二维画布上展示,所以一般绘制三 ...

  6. 如何用python画七彩蟒蛇_Python实现七彩蟒蛇绘制实例代码

    本文主要研究的是Python编程turtle的实例,绘制一个七彩蟒蛇..具体如下. 第2周的课后练习里,有一道题目,要求修改"蟒蛇绘制"程序,对Python 蟒蛇的每个部分采用不同 ...

  7. python七彩蟒蛇代码_Python实现七彩蟒蛇绘制实例代码

    本文主要研究的是Python编程turtle的实例,绘制一个七彩蟒蛇..具体如下. 第2周的课后练习里,有一道题目,要求修改"蟒蛇绘制"程序,对Python 蟒蛇的每个部分采用不同 ...

  8. python和java打架动态图_Python动态图实例与实践,PYTHON

    今天(3.8)是个特殊节日哈,针对妇女朋友.众所周知,世界上最早的程序员是女性哦,刚好有GITHUB一个超火的动态图项目:barrace(https://gist.githubusercontent. ...

  9. python歌词图表分析_Python可视化图分析毛不易的《入海》,看看听歌的人都在想些什么...

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 欢迎关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不 ...

最新文章

  1. 只要可能,就缓存数据和页输出
  2. Kafka 基本原理(8000 字小结)
  3. Python之闭包、装饰器及相关习题练习
  4. 基于WebSocket协议的iOS端即时聊天
  5. lisp修改界址线属性_如何获取界址线的界址线位置等扩展属性
  6. 实验:PIO外部中断
  7. 在一个类型的继承体系中,成员的构造顺序
  8. 如何在容器内高效编程?
  9. ubuntu mysql master slave_Ubuntu下MySQL5.5 配置主从(Master Slave)同步
  10. oracle-pl/sql之一
  11. 绝大部分博士目前都无法进入大学
  12. 牛客练习赛21:A. 黑妹的游戏I
  13. 思维导图很难做?MindManager教你一招致胜!
  14. python数据分析与发展常用哪些软件_常用数据分析软件比较
  15. python翻转课堂_翻转课堂
  16. 【2020 Java基础快速学习路线】写了很久,这是一份最适合普通大众、非科班的路线
  17. windows服务器硬盘怎么扩容,亚马逊Amazon EC2 Windows服务器磁盘扩容操作步骤
  18. 郝斌c语言大纲百度云,C语言学习大纲 郝斌(讲解)
  19. GMT绘图geotiff转grd
  20. NYOJ 541 最强DE 战斗力(大数水)

热门文章

  1. 前端ps中常用的操作
  2. Mac虚拟机CrossOver2022下载及快速安装游戏
  3. F5 Networks 任命 Adam Judd 领导亚太区销售工作
  4. 计算机网络 自顶向下方法 第一章:计算机网络和因特网 习题答案
  5. kali安装gaps|Linux安装gaps
  6. R qtl package 使用记录
  7. 老男孩教育每日一题第120天-如何统计脚本执行的时间?
  8. Zencart产品属性批量添加
  9. 2021年电工(中级)模拟考试题及电工(中级)模拟考试题库
  10. 积分兑换商城系统价格