matplotlib 使用简明教程(六)-图像、动画相关

matplotlib 使用简明教程(六)-图像、动画相关

    • Matplotlib 提供的图片功能
        • 将矩阵绘制成图像
        • 将图像存储为矩阵
        • 保存图像为文件
        • 制作缩略图
        • interpolation,图片插补方式
        • Colormap,颜色映射
        • 添加图片背景
    • 动画绘制
      • 通过函数绘制动画
        • 初始化函数
        • 动画导出
      • 通过已有图表绘制动画
        • 初始化函数
        • 动画导出
      • Jupyter Notebook 注意事项
    • 动画渲染工具选择

Matplotlib 提供的图片功能

Matplotlib 只支持 PNG 类型的图片,如果希望使用其他图片格式,请安装 Pillow,PIL(Python Imaging Library)的一个分支版本。
官方建议通过这个方式导入库:

import matplotlib.image as mpimg

将矩阵绘制成图像

使用 plt.imshow(X, **kwargs),重要参数:

  • X:图像参数,数据为实数或整数
    • MxN:,灰度
    • MxNx3:RGB
    • MxNx4:RGBA
  • alpha:透明度,如果 X 参数中包含了透明度信息,则忽略
  • cmap:颜色映射方式
  • interpolation:图片插补方式
  • orgin:图片起始位置,‘upper’ 为左上角,‘lower’ 为右下角
  • aspect:宽高比
    • ‘atuo’:适应 axes 来调整自己的宽高逼
    • ‘equal’:axes 来适应图像大小或 extent 参数(如果设置了的话)
  • extent:图片的起始位置,(左边, 右边, 底部, 上边)
    • cmap:颜色映射方式
  • vmin,vmax:两个数值,用于把输入参数标准化到 [0,1] 内

或者使用 mpimg.pil_to_array(pilImage),将 PIL 对象转换成矩阵

也可以使用 plt.matshow(A, fignum = None, **kwargs),与 imshow 的区别在于,A 只能是一个灰度的矩阵,参数和 imshow 的基本相同,fignum 定义了使用的 figure(画布):

  • None 即新打开一个画布
  • 整数 即使用整数所代表的画布
  • 0 或 False 即使用当前的画布

将图像存储为矩阵

使用 mpimg.imread(fname, format=None),参数说明:

  • fname:图片的文件地址、URL,或一个用二进制方式打开的文件对象
  • format:图片的格式,默认使用 fname 中的地址展示的文件格式

保存图像为文件

使用 mpimg.imsave(fname, arr, vmin=None, vmax=None, cmap=None, format=None, origin=None, dpi=100),重要参数说明:

  • fname:文件路径的字符串,或者是一个文件对象(使用二进制读取)
  • format:文件类型,如果未设置,根据 fname 的地址所展示的文件格式为准
  • arr:图像参数,灰度、RGB 或 RGBA 格式,整数或实数
  • vmin,vmax:两个数值,用于把输入参数标准化到 [0,1] 内
  • cmap:颜色映射方式
  • origin : 图片起始位置,‘upper’ 为左上角,‘lower’ 为右下角
  • dpi:图像每英寸面积内的像素点数,并不影响图片的分辨率

制作缩略图

使用 mpimg.thumbnail(infile, thumbfile, scale=0.1, interpolation='bilinear', preview=False),参数说明:

  • infile:图片文件的路径、或文件对象(使用二进制读取)
  • thumbfile:缩略图文件的路径、或文件对象(使用二进制打开)
  • scale:缩放比例
  • interpolation:图片插补方式
  • preview:是否预览

interpolation,图片插补方式

可接受:‘none’, ‘nearest’, ‘bilinear’, ‘bicubic’, ‘spline16’, ‘spline36’, ‘hanning’, ‘hamming’, ‘hermite’, ‘kaiser’, ‘quadric’, ‘catrom’, ‘gaussian’, ‘bessel’, ‘mitchell’, ‘sinc’, ‘lanczos’

Colormap,颜色映射

官方提供的 Colormap 可以通过 这里 查询,可以直接通过名称在函数中调用,例如:

import numpy as np
import matplotlib.pyplot as plt

gradient = np.linspace(0, 1, 256)
gradient = np.vstack((gradient, gradient))
plt.imshow(gradient, cmap = 'YlOrRd') # 这里使用 cmap = 'YlOrRd' 来使用这种颜色映射
plt.show()

Matplotlib 还提供了 matplotlib.cm 类用来自定义 Colormap,这里不作介绍。

添加图片背景

使用 plt.figimage() 来为 Figure(画布)添加图片,注意这个不是作用在 axes 上的。
重要参数如下:

  • X:图片的数据
  • xo, yo:图片对于原点的偏移量,单位为像素
  • alpha:透明度
  • norm:归一化参数的实例
  • cmap:颜色映射
  • vmin, vmax : 用于把输入参数标准化到 [0,1] 内
  • origin:图片起始位置,‘upper’ 为左上角,‘lower’ 为右下角
  • resize:是否缩放

动画绘制

参考网址:https://matplotlib.org/api/animation_api.html?highlight=animation

可以大概分成两个部分:

  • 用于处理动画的类,包括
    • matplotlib.animation.FuncAnimation 类通过函数绘制动画
    • matplotlib.animation.ArtistAnimation 类通过一些现成的图表绘制动画
      一个动画处理的类,另一个是将动画输出

通过函数绘制动画

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

初始化函数

参数包括:

  • fig:将要绘制动画的画布
  • func:绘制每一帧动画时调用的函数,格式如 def func(frame, *fargs) -> iterable_of_artists:,具体参数说明如下
  • frames:一个数组、整数、派生器,或空,作为 func 参数中每次调用的 frame 参数
  • fargs:用于 func 函数中的其他参数,可选
  • init_func:用于绘制初始画布的函数,可选;如果没有设置,则以第一帧的结果作为初始画布的结果
  • save_count:frames 中缓存值的数量
  • interval:每帧的间隔(毫秒),默认 200
  • repeat_delay:再一次播放动画前停止的时间
  • repeat:是否重复播放

实际上 FuncAnimation 在工作时的机制更类似于:

for d in frames:
   artists = func(d, *fargs)
   fig.canvas.draw_idle()
   fig.canvas.start_event_loop(interval)

动画导出

最常使用 save(filename[, writer, fps, dpi, codec, ...]) 成员函数,参数说明如下:

  • filename:输出文件名
  • fps:每秒帧数,如果未设置,则以初始化函数中定义的 interval 作为参数
  • dpi:没英寸的点数
  • bitrate:视频质量,每秒多少 kb,可选
  • codec:编码方式,可能需要结合 writer 参数使用
  • writer:用于对动画进行处理的对象,可以是一个字符串或者 MovieWriter 对象
  • extra_anim:列表,其他一个需要合并的动画,需要与当前动画使用同一个画布(Figure),可选

其他成员函数还包括:
to_html5_video(embed_limit=None)
to_jshtml([fps, embed_frames, default_mode])

通过已有图表绘制动画

matplotlib.animation.ArtistAnimation(fig, artists, interval, repeat_delay, repeat, blit)

初始化函数

参数说明如下:

  • fig:将要绘制动画的画布
  • artists:需要绘制的图表(artists)列表
  • interval:每帧的间隔(毫秒),默认 200
  • repeat_delay:再一次播放动画前停止的时间
  • repeat:是否重复播放
  • blit:是否使用“快传输”的方式优化绘制过程,

动画导出

和 FuncAnimation 类一样

Jupyter Notebook 注意事项

  • 需要设置 backend 为 notebook 或 nbagg,且选择 notebook 时不支持背景颜色的变换
  • 导出时需要使用 from IPython.display import HTMLHTML(ani.to_html5_video())

动画渲染工具选择

有几种渲染工具类可供选择,不做具体介绍。可以用于截取某些“帧”

  • 使用 Pillow 库,所有数据均在缓存中:PillowWriter 介绍

  • 基于管道(pipe-based),单独使用一个进程来渲染动画,效率更高,但是有些系统可能不适用:

    • FFMpegWriter 介绍
    • ImageMagickWriter 介绍
    • AVConvWriter 介绍
  • 基于文件(file-based),所有数据会缓存到文件中,速度慢一些,但是兼容性更好,易于排查问题

    • FFMpegFileWriter 介绍
    • ImageMagickFileWriter 介绍
    • AVConvFileWriter 介绍

    系列文章:

matplotlib 使用简明教程(一)-基础概念:
https://blog.csdn.net/fenghuizhidao/article/details/79352882
matplotlib 使用简明教程(二)-常用图表
https://blog.csdn.net/fenghuizhidao/article/details/83090043
matplotlib 使用简明教程(三)-一些专业图表简介
https://blog.csdn.net/fenghuizhidao/article/details/83090165
matplotlib 使用简明教程(四)-辅助性元件
https://blog.csdn.net/fenghuizhidao/article/details/83090249
matplotlib 使用简明教程(五)-画布、图表、元素基础操作
https://blog.csdn.net/fenghuizhidao/article/details/83090320
matplotlib 使用简明教程(六)-图像、动画相关
https://blog.csdn.net/fenghuizhidao/article/details/83090512
matplotlib 使用简明教程(七)-样式定义
https://blog.csdn.net/fenghuizhidao/article/details/83090553

你可能感兴趣的:(Python学习,Matplotlib)