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 可以通过 这里 查询,可以直接通过名称在函数中调用,例如:

 

 

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 在工作时的机制更类似于:

 

 


动画导出
最常使用 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
————————————————
版权声明:本文为CSDN博主「平头某」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fenghuizhidao/article/details/83090512

posted @ 2021-08-04 13:41  常给自己加个油  阅读(328)  评论(0编辑  收藏  举报