前言

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

文章目录

  • 前言
  • 一. 动态图示例
  • 二. 在pycharm上呈现动态图
  • 三. 动态图的绘制
    • 方法一:调用matplotlib中库
      • 例子:正弦曲线绘制
    • 方法二:使用for循环
  • 四. 动态图的保存
    • 1. 保存为html格式
    • 2. 保存为gif格式
    • 3. 保存为MP4格式
      • 3.1 用imagemagick保存
      • 3.2 用python库保存
  • 五. 总结

一. 动态图示例

衰减振荡曲线

正弦波

更多例子请看官方文档

  1. 官方举例:贝叶斯曲线
  2. 官方文档 进入后下拉查看example

二. 在pycharm上呈现动态图

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

  1. 控制台绘图:方便保存输出记录(如将IPython 终端输出转换成 Html 文件),但无法动态绘图(大大的缺点)。
  2. 弹出窗绘图:可以交互式的放大、拖动图片,可进行动态绘图,并且能将图片保存成不同的格式。

而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 animationfig, 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动态图的绘制和保存相关推荐

  1. python简单动态图_python动态图的绘制和保存

    前言 这段时间要做一个涉及排队论的数学建模,需要动态绘图.建好了模,却没想到在原以为简单的绘图上耗费了我大量时间.原因在于用python作动态绘图的参考资料过于琐碎.因此在我费了九牛二虎之力终于实现动 ...

  2. 怎么把动态图从python弄下来_Python将视频或者动态图gif逐帧保存为图片的方法

    本文是基于opencv将视频和动态图gif保存为图像帧.可以根据输入视频格式的不同,修改第21行. 对动图的处理不同于视频,PIL库包含对图像序列的基本支持.当打开gif图像时,自动加载第一帧.当图像 ...

  3. python怎么存为动图_Python将视频或者动态图gif逐帧保存为图片的方法

    本文是基于opencv将视频和动态图gif保存为图像帧.可以根据输入视频格式的不同,修改第21行. 对动图的处理不同于视频,PIL库包含对图像序列的基本支持.当打开gif图像时,自动加载第一帧.当图像 ...

  4. Python动态图见得多了?Excel:亦可赛艇!我可是身经百战了

    作者:Ryoko量子 来源:凹凸数据 朋友圈又看到 Python 广告推送了,什么"你还在用 Excel 加班啊"."我一进去就看见 Python 在打 Excel 啊& ...

  5. Python将视频或者动态图gif逐帧保存为图片

    本文是基于opencv将视频和动态图gif保存为图像帧.可以根据输入视频格式的不同,修改第21行. 对动图的处理不同于视频,PIL库包含对图像序列的基本支持.当打开gif图像时,自动加载第一帧.当图像 ...

  6. 优雅的 Python 动态图工具

    作者 | pythonic生物人 来源 | pythonic生物人 数据动态图怎么做,效果图, 多子图联动竞赛图 安装 pip install pandas_alive#或者 conda instal ...

  7. python动态图-python之最炫抖音动态图

    原标题:python之最炫抖音动态图 我们使用2013 年-2019 年比特币(BTC) 的价格数据绘制面积图动画,其HTML 交互效果页面如图11-4-6 所示.该数据集包括四列数据:年份(year ...

  8. 软件项目技术点(9)——如何将gif动态图拆分绘制

    AxeSlide软件项目梳理   canvas绘图系列知识点整理 背景介绍 我们的软件支持插入gif图片,并且展示在软件里是动态的,例如插入下面这张gif图. 在软件里显示的同样是这样的动态效果: 那 ...

  9. python动态图-Python图像处理之gif动态图的解析与合成操作详解

    本文实例讲述了Python图像处理之gif动态图的解析与合成操作.分享给大家供大家参考,具体如下: gif动态图是在现在已经司空见惯,朋友圈里也经常是一言不合就斗图.这里,就介绍下如何使用python ...

最新文章

  1. VMware vSphere
  2. CreateBindGroupNode.txt
  3. Go 语言框架 Gin 练习1
  4. MySQL【环境搭建 02】Linux 非 root 用户部署 mysql-5.7.28 设置开机启动及问题汇总(含云盘资源)
  5. WebDeploymentSetup使用乱码问题解决
  6. ps -ef 输出结果的具体含义
  7. 添加右键用Sublime Text3 打开文件和文件夹
  8. android 之数据存储(IO)
  9. DM368 Uboot
  10. 话里话外:企业内控的灵魂——企业文化
  11. 云原生全景图之五:应用程序定义和开发层
  12. bzoj3687简单题*
  13. div加载异步加载html,初始化页面,异步加载组件的问题
  14. 神经损伤怎么康复好 成都顾连康复医院专科专治
  15. Solidity入门学习
  16. 智能优化算法:蝗虫优化算法-附代码
  17. 哀其不幸的墨西哥人工智能
  18. 琵琶行用计算机弹,琵琶行三次弹
  19. 360 腾讯 迅雷Windows编程 网络编程面试题及答案
  20. 三分钟学会PS小清新调色教程-萧蕊冰

热门文章

  1. 2023全国安全生产合格证危险化学品生产单位主要负责人模拟一[安考星]
  2. Android手机如何获取唯一标识(手机串号)
  3. unable to open 'x:\Program Files (x86)\Adobe Flash Builder 4.6\eclipse\plugins\com.adobe.flexbuild
  4. Android开发如何关闭GPU硬件加速
  5. 有哪些互联网大厂网站使用了拼音域名?
  6. android beam小米,不看不知道!小米5手机上的NFC功能居然有这么多用途
  7. 三角函数π/2转化_可打印丨初中数学三角函数公式
  8. 骨传导有没有副作用,骨传导耳机可以更好的保护听力吗
  9. 在电影《利剑出鞘》中,侦探布兰科是如何使用假设检验的分析方法来破案的?...
  10. 如何修改eclipse 中Android的预览layout布局背景颜色