1.什么是matplotlib库
用途广泛,适用性强;面向对象的语法增加了学习成本;对于复杂图像的绘制,相比于R中的ggplot2存在一些差距,即不适合多规则数据、多图层属性。
2.绘图要素
2.1基本图形元素名称:画布(figure)、坐标图形(axes)、轴(axis)
和艺术对象(aritist)、图名(title)、刻度(tick)、刻度标签(tick label)、轴标签(axis label)、轴脊(spine)、图例(legend)、网格(grid)、线(line)和数据标记(marker)
2.2 图形元素举例
- 画布 (figure):其包含多个图形元素。它既可以代表图形本身进行图的绘制,又可以被划分为多个子区域。用户可以在画布中设置画布大小(figsize)、分辨率(dpi)和背景颜色等其他参数。
- 坐标图形 (axes):其称为子图。主要为绘图数据提供展示区域。在大多数情况下,一个画布对象中包含一个子图区域,子图区域由上、下、左、右 4 个轴脊以及其他构成子图的组成元素组成。
- 轴 (axis) :数据轴对象,即坐标轴线。包含位置(locator)对象和格式(formatter)对象,分别用于控制坐标轴刻度的位置和格式。
2.3图层顺序
通过设置每个绘图函数中的zorder参数来设定不同的图层,实现多个图层叠加。
2.4轴比例和刻度
- 轴比例。其规定了数值与给定轴之间的映射方式,默认轴比例方式为线性(linear)方式,其他诸如 log、logit、symlog 和自定义函数比例(function scale)方式。当我们采用不同的轴比例方式时,刻度位置和刻度格式也会相应产生变动。
- 刻度位置和刻度格式。其规定了每个轴对象上刻度的位置与格式。
2.5坐标系
常见的坐标系有直角坐标系、极坐标系和地理坐标系。
-
直角坐标系:经常使用的坐标系,包括二维、三维。
-
极坐标系:要求数据完整且具有周期性的变化。
-
地理坐标系:Matplotlib 地理坐标系中的地理投影方式较少,仅有 Aitoff 投影、Hammer 投影、Lambert投影和 Mollweide 投影 4 种,因而不适合绘制地理图表,我们可使用 Python 的第三方库(如 cartopy、ProPlot 等库)绘制地理图表。
3.多子图绘制方法
- subplot() 函数:可以对当前画布对象添加单个子图,且每次添加子图都会规定其位置顺序
plt.figure(figsize=(6,3),dpi=100,facecolor="w")
ax1 = plt.subplot(212)#两行一列第二行
ax1.text(0.5, 0.5, "subplot(212)", alpha=0.75, ha="center", va="center", weight="bold", size=12)
ax2 = plt.subplot(221)#两行两列第一个
ax2.text(0.5, 0.5, "subplot(221)", alpha=0.75, ha="center", va="center", weight="bold", size=12)
ax3 = plt.subplot(222)#两行两列第二个
ax3.text(0.5, 0.5, "subplot(222)", alpha=0.75, ha="center", va="center", weight="bold", size=12)
-
add_subplot() 函数:使用方法和 subplot() 函数类似,不同之处是,add_subplot() 函数先产生 figure 对象,然后对该对象依次添加子图
-
subplots() 函数
subplots(nrows, ncols, sharex, sharey)
该函数的第 1 个参数 nrows 表示绘制子图的行数,第 2 个参数 ncols 表示绘制子图的列数,行数与列数的乘积即绘制的总子图数,第 3 个参数 sharex 可以用来设定是否共享 X 轴,第 4个参数 sharey 可以用来设定是否共享 Y 轴。该函数会返回一个坐标数组对象,该对象用于每个子图的单独绘制。
fig, axs = plt.subplots(2, 3,figsize=(6,4),dpi=100,sharex=True, sharey=True)
axs[0,0].text(0.5, 0.5, "subplots(0,0)", alpha=0.75, ha="center", va="center", weight="bold", size=12)#axs[0,0]表明图像位置
axs[0,1].text(0.5, 0.5, "subplots(0,1)", alpha=0.75, ha="center", va="center", weight="bold", size=12)
axs[0,2].text(0.5, 0.5, "subplots(0,2)", alpha=0.75, ha="center", va="center", weight="bold", size=12)
axs[1,0].text(0.5, 0.5, "subplots(1,0)", alpha=0.75, ha="center", va="center", weight="bold", size=12)
axs[1,1].text(0.5, 0.5, "subplots(1,1)", alpha=0.75, ha="center", va="center", weight="bold", size=12)
axs[1,2].text(0.5, 0.5, "subplots(1,2)", alpha=0.75, ha="center", va="center", weight="bold", size=12)
- axes()函数:主要功能是为当前画布 (figure) 对象添加坐标图形 (axes) 对象,使其成为当前的坐标图形(axes)对象。此外,还需要提供 rect 参数(一个四元组:left、 bottom、width、height)。axes() 函数的常见用法包括对当前画布 (figure) 对象中的**坐标图形(axes)**对象添加颜色和大小映射等。
from colormap import parula #自定义的颜色系,有问题
- subplot2grid() 函数:实现对不规则多子图的绘制,即在当前画布对象上绘制网格(grid),网格可用于在特定位置绘制布局和大小不同的子图对象。
subplot2grid(shape, location, rowspan/colspan)
该函数的第 1 个参数shape规定了的网格的行数和列数,第 2 个参数location决定了子图在网格内的行号和列号,第 3 个参数为rowspan或colspan,它们分别规定了每个子图向下跨越的行数和向右跨越的列数,也就实现了大小不一的子图的绘制。
- gridspec.GridSpec() 函数:用于指定放置子图的网格的几何形状
gridspec.GridSpec(nrows, ncols, figure, left, bottom, right, top)
其中,参数nrows表示网格中的行数;参数ncols表示网格中的列数;left、bottom、right和top是可选参数,用于将子图的范围定义为图形宽度或高度的一部分。
- subplot_mosaic()函数:它可利用 mosaic 参数设置特定字符串符号(重复次数、顺序等)来进行子图的视觉布局
fig, axd = plt.subplot_mosaic([['upper left', 'right'],
['lower left', 'right']],
figsize=(6,3), constrained_layout=True)
for k in axd:
annotate_axes(axd[k], f'axd["{k}"]', fontsize=14)
4.常见绘图函数
- plot():线图、点图、带连接 线的点图
- scatter():散点图
- bar()/barh():柱形图 / 条形图、堆积 柱形图 / 堆积条形图、
- axhline()/ axvline():垂直于 X/Y 轴的直线
- axhspan()/ axvspan():垂直于 X/Y 轴的矩形块
- text():文本
- fill_between():面积图、填充图
- pie() x:饼图
- contour():等高线图
- step():步阶图
- stem():茎叶图
- boxplot():箱线图
- errorbar():误差线
- hist():直方图
- violinplot():“小提琴”图