概要
matplotlib算是历史悠久的python可视化库了,2003年就发布了 v0.10 版本,现在已经到了 v3.x 版本了。
代码和功能虽然有翻天覆地改变,但由于其历史悠久,功能强大,用户基数庞大,所以,我们在使用 matplotlib 库的时候,几乎可以搜索到我们需要的各种示例。
我之前的做的一些数据分析结果的展示项目,没有去研究 matplotlib 的文档,只是看看接口和示例,也能写出各种分析结果的展示。
但是,系统地去了解下 matplotlib 库还是有必要的,一方面了解之后可以写出更高效的代码,另一方面,对各种示例能做到知其然也知其所以然,更高效的对示例做一些微调。
基础元素
下面都是 matplotlib 库中一些基本元素的术语,直接用的英文,没有翻译,这样方便和库的API对应上(库中的API函数也是使用这些英文名称)。
matplotlib 中重要的基础元素主要有5种:
- Figure:最重要的元素,所有的其他元素都是绘制在其上
- Axes:第二重要的元素,也就是 subplot(子图),数据都是显示在这个区域
- Axis:坐标轴,本质是一种带装饰的 spines,一般分为 xaxis 和 yaxis
- Spines:数据显示区域的边界,可以显示或不显示
- Artist:任何显示在 Figure 上的元素
这5个元素的概念不是互相独立的,比如 Axis 可以看做是一种 Spines,而Figure,Axes和Axis都可以看成是 Artist。
Artist 是很通用的概念,几乎任何需要绘制的元素都可以当成是 Artist,但是一个 Artist 只能存在于一个 Axes 之上。
图元(graphic primitives)
图元可以看作是可编辑的 Artist,包括:
- Patches,比如 markers,bars,也可以是一系列的 circles,rectangles,polygons等等
- Lines,比如 ticks,hatches等等
- Texts,支持任意的字体,也支持 latex 格式的数学格式
通过下图可以看到 Figure 上显示的各类图元:
绘制图形的引擎(Backends)
matplotlib 的图形绘制引擎也是可以设置的,根据显示的要求选择栅格图或者矢量图。
Renderer | Type | FileType |
---|---|---|
Agg | 栅格图 | png |
PS | 矢量图 | Postscript(PS) |
矢量图 | ||
SVG | 矢量图 | svg |
Cairo | 栅格图/矢量图 | png/pdf/svg |
这些 renderers 可以图形接口(UI)对接
Interface | Renderer | Dependencies |
---|---|---|
GTK3 | Agg/Cairo | PyGObject & Pycairo |
QT4 | Agg | PyQt4 |
QT5 | Agg | PyQt5 |
Tk | Agg | TkInter |
Wx | Agg | wxPython |
Web | Agg | Browser |
外形尺寸和清晰度(dimmensions & resolution)
matplotlib 的尺寸的单位是(inch),可以在初始化指定,也可以在随后的代码中指定。
比如:
plt.figure(figsize=(6, 6)) # 生成的图像是 6英寸 * 6英寸的
这里的单位是英寸,不是像素。如何要生成指定像素的图像,还需要指定清晰度,也就是dpi(dots per inch)。
比如:
plt.figure(figsize=(6, 6), dpi=100) # 生成 600*600 像素的图像
plt.figure(figsize=(5.12, 5.12), dpi=100) # 生成 512*512 像素的图像
也就是说,像素由图形大小乘以其清晰度来决定的,figsize控制图像的大小,dpi控制图像的清晰度。
总结
对 matplotlib 中的基础元素和概念的了解有助于理解它的文档中各类API的划分依据,绘制复杂图像的时候,能够更合理的规划显示区域和绘制顺序。