matplotlib 使用简明教程(五)-画布、图表、元素基础操作
- 通过 `plt` 库进行画布(figure)相关操作
- 通过 `plt` 库进行多图表操作
- `plt.subplot()`
- `plt.subplot2grid(shape, loc, rowspan=1, colspan=1, fig=None, **kwargs)`
- `plt.subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)`
- `plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)`
- `plt.twinx(ax=None)` 和 `plt.twiny(ax=None)`
- 图表(Axes)基本操作
通过 plt
库进行画布(figure)相关操作
创建一个新的画布或引用一个已有的画布
plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, clear=False)
重要参数包括:
- num:Figure 的编号,可选。如果这个 num 的 figure 已经存在,那么激活这个 figure 并引用,否则生成一个新的 figure
- figsize:设置画布的尺寸,默认 [6.4, 4.8],单位英寸
- dpi:分辨率,默认 100
- facecolor:背景颜色
- edgecolor:边线颜色
- clear:如果 num 代表的 figure 已经存在,是否要将这个画布清空
更新当前的画布(figure)
plt.draw()
对于支持交互类型(interactive model)的 backend,如果已经开启了交互类型(ion()),则不需要每次调用。
绘制画布(figure)
plt.show()
绘制画布,对于支持交互类型的 backend,没有作用;对于非交互类型(non-interactive model)的 backend,则立即显示画布,直至画布被关闭。
将画布保存成文件
plt.savefig(fname, dpi=None, facecolor='w', edgecolor='w', orientation='portrait', papertype=None, format=None, transparent=False, metadata=None)
重要参数包括:
- fname:一个文件路径或者一个 file 类型的对象
- dpi:分辨率,一个整数或者 ‘figure’ 指定使用 figure 的分辨率
- facecolor:背景颜色
- edgecolor:边线颜色
- orientation:方向,‘landscape’ 或 ‘portrait’
- papertype:纸张类型,‘letter’, ‘legal’, ‘executive’, ‘ledger’, ‘a0’ 到 ‘a10’, ‘b0’ 到 ‘b10’
- format:格式,可能是 ‘png’,‘pdf’,‘ps’,‘eps’,‘svg’ 等,具体取决于当前 backend 所支持的格式
- transparent:是否透明
- metadata:一些参数,kv 格式的参数
清除当前的画布(figure)
plt.clf()
关闭某个画布
plt.close()
参数可以是:
- 空,即关闭当前画布
- Figure 实例
- 整数,Figure 编号
- 字符串,Figure 名称
- ‘all’,所有画布
获取画布信息:
作用 | 函数 |
---|---|
获取当前的画布(figure) | plt.gcf() |
返回当前所有画布的标签列表 | plt.get_figlabels() |
返回当前所有画布的编号 | plt.get_fignums() |
为画布(Figure)添加标题
plt.suptitle(t, **kwargs)
重要参数说明:
- t:标题内容
- x,y:坐标位置,默认 x = 0.5,y = 0.98
- ha:水平对齐方式,‘center’, ‘left’, ‘right’
- va:竖直对齐方式,‘top’, ‘center’, ‘bottom’, ‘baseline’
使用建议
matplotlib.figure.Figure
就是 matplotlib 的画布类,通过这个类的对象其实可以完成 plt
中封装的画布相关的所有功能。
感兴趣的朋友可以通过 https://matplotlib.org/api/_as_gen/matplotlib.figure.Figure.html#matplotlib.figure.Figure 来了解详情。但是为了突出“实用”,减少学习成本,建议还是主要通过 plt
来操作画布,唯一需要解决的问题就是如何切换当前画布,如下举例说明:
>>> f1 = plt.figure() # 创建画布 1
>>> f2 = plt.figure() # 创建画布 2
>>> f3 = plt.figure() # 创建画布 3
>>> f3 == plt.gcf() # 当前画布是 f3
True
>>> plt.get_fignums() # 获取画布编号列表
[1, 2, 3]
>>> f = plt.figure(num = 1) # 通过 figure(num = 编号) 引用编号为 1 的画布
>>> f1 == f # f1 和 f 指向了同一 Figure 对象
True
>>> f1 == plt.gcf() # 当前画布已经切换成了 f1
True
通过 plt
库进行多图表操作
plt.subplot()
将画布(Figure)分割成若干块,并选择其中的一块作为绘制的区域。有两种基本调用方式:
subplot(行, 列, 序号)
其中的行、列即行数和列数,序号从左上角开始向右再向下,起始于 1subplot(位置信息)
一个三位数,三位的含义分别为行、列、序号
其他参数:
- sharex, sharey:Axes 对象,是否要和这个 Axes 共享 x 或 y 轴
- label:为返回的 label 添加标签
plt.subplot2grid(shape, loc, rowspan=1, colspan=1, fig=None, **kwargs)
将画布(Figure)分割成特定的 MxN 的若干小格,并指定其中某些格子作为绘制的区域。重要参数说明:
- shape:一个元组,画布分割的方式,第一个是行数,第二个列数
- loc:一个元组,指定绘制区域的左上角微智,第一个是行数,第二个是列数
- rowspan:向右扩展的格子数量
- colspan:向下扩展的格子数量
plt.subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)
创建一个画布(Figure)和一系列的子图表,重要参数说明:
- nrows, ncols:子图表的的行数和列数
- sharex, sharey:是否共享 x 或 y 轴,可选参数包括:
- True 或 ‘all’:所有的子图表共享坐标
- False 或 ‘none’:所有的子图表独立
- ‘row’:每行的子图表共享坐标
- ‘col’:每列的子图表共享坐标
- squeeze:是否根据画布的分割情况调整返回数据的格式,默认(False)返回一个二维数组,如果勾选该选项为(True),则 1x1 的会返回一个单独的变量,Nx1 和 1xM 会返回一个一维数组
- num:设置返回画布(figure)的编号
返回值包括:
- fig:返回的画布(Figure)
- ax:返回的子图表变量或列表
plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)
调整子图表的一些布局:
- left,right,bottom,top:子图表到画布边缘的间隙
- wspace,hspzce:子图表之间的间隙的宽度、高度
plt.twinx(ax=None)
和 plt.twiny(ax=None)
创建一个共用 x 或 y 轴的图表,新的图表会叠加在 ax 上(如果 ax 为 None 即叠加到当前的图表上),新图表的 y 或 x 轴 会放在右侧或顶部
图表(Axes)基本操作
向当前画布添加图表,并作为当前的图表
plt.axes(arg=None, **kwargs)
调用方式:
plt.axes()
plt.axes(rect, projection=None, **kwargs)
plt.axes(ax)
重要参数说明:
- arg:定义了具体行为,可选值为:
- None:等价于
plt.subplot(111, **kwargs)
- 数组:格式为 [左, 下, 宽, 高],说明图表的位置和大小,使用归一化的实数
- Axes 对象:设置当前图表为该图表
- None:等价于
- sharex,sharey:是否共用 x 或 y 轴
- label:设置图表的标签
- projection:指定投影类型,可选,可以是’aitoff’, ‘hammer’, ‘lambert’, ‘mollweide’, ‘polar’, ‘rectilinear’ 或者自定义字符串
获取当前画布中的图表列表
plt.gca(**kwargs)
获取当前画布中的图表列表,如果设置了 kwargs,则根据这些参数进行过滤。如果过滤结果为空,那么就创建一个符合条件的图表并返回
重设当前图表
plt.sca(ax)
设置当前图表为 ax,并把 ax 所属的画布设为当前画布
删除图表
plt.delaxes(ax = None)
如果参数为空,删除当前图表,否则删除 ax 定义的图表
系列文章:
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