iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >如何利用Matplotlib库绘制动画及保存GIF图片
  • 324
分享到

如何利用Matplotlib库绘制动画及保存GIF图片

2024-04-02 19:04:59 324人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

前言 在自学机器学习或者是深度学习的过程中,有的时候总想把执行过程或者执行结果显示出来,所以就想到了动画。好在用 python 实现动画有许多中方式,而大家熟知的 Matplotli

前言

在自学机器学习或者是深度学习的过程中,有的时候总想把执行过程或者执行结果显示出来,所以就想到了动画。好在用 python 实现动画有许多中方式,而大家熟知的 Matplotlib 库就可以实现。

本文的目的是对 Matplotlib 的动画实现手段做一个简单的说明。

绘制动画


import matplotlib.pyplot as plt
import matplotlib.animation as animation

如果要让 matplotlib 实现动画功能的话,那么就要引入 animation 模块。

然后再创建 animation 的对象。


anim = animation.FuncAnimation(fig, run, data_gen, blit=False, interval=10,
                              repeat=False, init_func=init)

animation 的实现类是 FuncAnimation,它有一个构造方法。下面先通过一个示例,讲解 animation 的基本用法,然后再来细致分析 FuncAnimation 构造方法中各项参数的意义。

我们的目标是做一个 Sin 函数的动画示例。

代码很简单。


import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig, ax = plt.subplots()
xdata, ydata = [], []
ln, = plt.plot([], [], 'ro',animated=True)

def init():
    ax.set_xlim(-np.pi,np.pi)
    ax.set_ylim(-1, 1)
    return ln,

def update(frame):
    xdata.append(frame)
    ydata.append(np.sin(frame))
    ln.set_data(xdata, ydata)
    return ln,

anim = animation.FuncAnimation(fig, update, frames=np.linspace(-np.pi,np.pi, 90),interval=10,
                    init_func=init,blit=True)
plt.show()

核心代码是这一行。


anim = animation.FuncAnimation(fig, update, frames=np.linspace(-np.pi,np.pi, 90),interval=10,
                    init_func=init,blit=True)

按照上面的示例代码,我们可以依葫芦画瓢编写动画代码了。

但,如果我们需要达到灵活运用的话,就需要花点心思,了解它们的机制。

我们先来看看 FuncAnimation 的构造方法。


def __init__(self, fig, func, frames=None, init_func=None, fargs=None,
                 save_count=None, **kwargs):

fig 自然是 matplotlib 中的 figure 对象。

func 是每一次更新时所调用的方法,它是回调函数。因此,我们可以在这个方法中更新 figure 当中的 axes 中的 line2d 对象,它是动态更新 figure 的根本。

frames 代表了整个动画过程中帧的取值范围,而本质上是一个数据发生器。我将在后面重点讲解它。

init_func 是初始函数,用来初始 figure 的画面。

fargs 是每次附加给 func 回调函数的参数,可以为 None

save_count 是缓存的数量

除此之外,还有一些可选的参数,它们分别是

interval 是每 2 个 frame 发生的时间间隔,单位是 ms,默认值是 200.

repeat_delay 取值是数值,如果 animation 是重复播放的话,这个值就是每次播放之间的延迟时间,单位是 ms。

repeat bool 型可选参数,默认为 True,代表动画是否会重复执行

blit bool 型可选参数,控制绘制的优化。默认是 False。

如何理解 animation 呢?

我认为,animation 的核心是 frames 和 func。

frames 可以取值:iterable,int,generator 生成器函数 或者是 None。

在上面的代码中,我们给 frames 的取值是这样的。


frames=np.linspace(-np.pi,np.pi, 90)

其实就是一个 list,它的值范围为 -pi 到 pi,frames 总共有 90 帧,而 list 是一个 iterable 类型,所以它可以不停的迭代。

frames 也可以取值为整数,相当于给参数赋值 range(frames)。

frames 也可以取值为 None,那么它的结果相当于传递 itertools.count,结构就是从 0 开始,每次步进 1,无限的执行下去。

frames 还接受 generator 函数,也就是生成器,但有个前提是,生成器要符合下面的签名格式。


def gen_function() -> obj

参数列表为空,但需要返回一个值,这个值就会传入到 func 回调函数当中。

func 是回调函数,它会在每次更新的时候被调用,所以我们只需要在这个函数中更新 figure 中的数值就可以了,就像下面代码。


def update(frame):
    xdata.append(frame)
    ydata.append(np.sin(frame))
    ln.set_data(xdata, ydata)
    return ln,

frames 和 func 的关系是什么?

实际上,frames 决定了整个动画 frame 的取值范围,它会在 interval 时间内迭代一次,然后将值传递给 func,直到整个 frames 迭代完毕。

我本人而言,也更倾向于用 generator 函数去定义 frames 而不是直接分配一个列表,所以我可以将之前的代码改写如下。


import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig, ax = plt.subplots()
xdata, ydata = [], []
ln, = plt.plot([], [], 'ro',animated=True)

def init():
    ax.set_xlim(-np.pi,np.pi)
    ax.set_ylim(-1, 1)
    return ln,

def update(frame):
    xdata.append(frame)
    ydata.append(np.sin(frame))
    ln.set_data(xdata, ydata)
    return ln,

def data_gen():

    frame = -np.pi

    step = 2 * np.pi / 90

    while frame < np.pi:
        frame += step
        yield frame

# anim = animation.FuncAnimation(fig, update, frames=np.linspace(-np.pi,np.pi, 360),interval=10,
#                     init_func=init,blit=True)
anim = animation.FuncAnimation(fig, update, frames=data_gen,interval=10,
                    init_func=init,blit=True)

plt.show()

data_gen 就是一个生成器函数,它会每隔 10ms 运行一次,然后将结果传递给 update 函数。

data_gen 里面运用到了 yield 关键字,这是的我们可以在每次迭代时才返回相应的结构,而不要在一开始就分配。如果不熟悉这方面知识点的同学,可以自行搜索相应的知识。

保存动画

因为经常写博客,所以也经常需要将结果保存下来,一般我会保存为 .gif 格式图片,本篇博文的 gif 图像就是通过 matplotlib 保存的。

好在用 matplotlib 实现它也并不难。


anim.save('test_animation.gif',writer='imagemagick')

一句代码就搞定了,运行成功后,会在当前目录下生成 test_animation.gif 图像。

需要注意到的是,如果要保存 gif 图像,这要求开发者电脑已经安装了 ImageMagicK。

ubuntu 用户可以通过如下命令安装。


sudo apt-get install imagemagick

并且,动画保存的时候要指定 writer 为 imagemagick.

动画可以保存为 gif 图像,自然也能保存为 mp4 视频格式。

但这要求开发者计算机已经安装好 FFmpeg 库,并且 save 方法中指定 writer 为 ffmpeg,具体细节请读者自行扩展阅读。

总结

到此这篇关于如何利用Matplotlib库绘制动画及保存GIF图片的文章就介绍到这了,更多相关Matplotlib库绘制动画内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 如何利用Matplotlib库绘制动画及保存GIF图片

本文链接: https://www.lsjlt.com/news/127690.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何利用Matplotlib库绘制动画及保存GIF图片
    前言 在自学机器学习或者是深度学习的过程中,有的时候总想把执行过程或者执行结果显示出来,所以就想到了动画。好在用 Python 实现动画有许多中方式,而大家熟知的 Matplotli...
    99+
    2024-04-02
  • 利用Python NumPy库及Matplotlib库绘制数学函数图像
    目录前言NumPy与Matplotlib函数绘图所需库函数语法导入所需模块一元一次函数一元二次函数指数函数正弦函数余弦函数高级玩法总结 前言 最近开始学习数学了,有一些题目...
    99+
    2024-04-02
  • 如何利用python库matplotlib绘制不同的图表
    这篇文章主要介绍如何利用python库matplotlib绘制不同的图表,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、绘制简单曲线图思路:通过3个坐标点,绘制曲线import matplotlib.py...
    99+
    2023-06-29
  • 如何利用Python matplotlib绘制风能玫瑰图
    这篇文章主要介绍如何利用Python matplotlib绘制风能玫瑰图,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!概述在之前的风资源分析文章中,有提到过用widrose包来进行玫瑰图的绘制,目前的可视化绘图包有很...
    99+
    2023-06-14
  • Python中如何使用Matplotlib库绘制图形
    目录前言一、简单的正弦函数与余弦函数二、进阶版正弦函数与余弦函数1.改变颜色与粗细2.设置图片边界3.设置记号4.设置记号的标签5.设置X,Y轴6.完整代码三、绘制简单的折线图总结前...
    99+
    2024-04-02
  • 如何使用Python中的matplotlib库制作动画
    这篇文章主要介绍了如何使用Python中的matplotlib库制作动画,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。matplotlib制作简单的动画动画即是在一段时间内快...
    99+
    2023-06-15
  • Python中如何使用matplotlib绘图建立画布及坐标系
    小编给大家分享一下Python中如何使用matplotlib绘图建立画布及坐标系,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、建立画布import ...
    99+
    2023-06-22
  • 如何在CSS中绘制曲线图形及展示动画
    目录理解 box-shadow使用阴影复制图像/投影图像在阴影坐标中运用三角函数三角函数如何在 CSS 中使用三角函数 sin/cos控制颜色及初始方向控制颜色在 css-doodl...
    99+
    2024-04-02
  • 如何使用Python matplotlib绘制xkcd动漫风格的图表
    这篇文章主要介绍如何使用Python matplotlib绘制xkcd动漫风格的图表,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!XKCDxkcd是兰道尔&middot;门罗(Randall Mun...
    99+
    2023-06-29
  • 如何利用 Python 绘制动态可视化图表
    目录一、安装相关的模块二、gif和matplotlib的结合三、gif和plotly的结合四、matplotlib多子图动态可视化五、动态气泡图一、安装相关的模块 首先第一步的话我们...
    99+
    2024-04-02
  • python如何利用matplotlib绘制并列双柱状图并标注数值
    目录项目场景:代码:效果图:扩展功能及代码:补充:Python画图实现同一结点多个柱状图总结项目场景: Python项目需要画两组数据的双柱状图,以下以一周七天两位小朋友吃糖颗数为例...
    99+
    2024-04-02
  • 如何使用Python自动爬取图片并保存
    小编给大家分享一下如何使用Python自动爬取图片并保存,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、准备工作用python来实现对百度图片的爬取并保存,以情...
    99+
    2023-06-22
  • 利用Java如何实现爬取网络图片并保存
    这篇文章给大家介绍利用Java如何实现爬取网络图片并保存,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。具体内容如下package getUrlPic;import java.io.ByteArrayOutputStre...
    99+
    2023-05-31
    java ava
  • Python如何利用D3Blocks绘制可动态交互的图表
    本篇内容主要讲解“Python如何利用D3Blocks绘制可动态交互的图表”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python如何利用D3Blocks绘制可动态交互的图表”吧!热力图热力图...
    99+
    2023-07-05
  • 如何利用python多线程爬取天气网站图片并保存
    目录1.1 题目1.2 思路 1.2.1 发送请求1.2.2 解析网页 1.2.3 获取结点 1.2.4 数据保存 (单线程) 1.2.4 数据保存 (多线程)总结1.1 题目 指定...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作