Matplotlib subplot()函数的用法(附带实例)
Matplotlib 可以实现在一张图上绘制多个子图表。Matplotlib 提供了三种方法,分别是 subplot() 函数、subplots() 函数和 add_subplot() 方法。
subplot() 函数直接指定划分方式和位置,它可以将一个绘图区域划分为 n 个子区域,每个 subplot() 函数只能绘制一个子图。
例如,绘制一个 2×3 的区域,subplot(2, 3, 3) 表示将画布分成 2 行 3 列,在第 3 个区域中绘制图表,用坐标表示如下:
另外,subplot() 在指定的区域中创建一个轴对象,如果新创建的轴和之前创建的轴重叠,那么之前创建的轴将被删除。
【实例 1】使用 subplot() 函数绘制包含多个子图的空图表。绘制一个 2 行 3 列包含 6 个子图的空图表,程序代码如下:

图 1 包含6个子图的空图表
通过上述示例我们了解了 subplot() 函数的基本用法,接下来将前面所学的简单图表整合到一张图表上,效果如下图所示:

图 2 包含多个子图的图表
程序代码如下:
subplot() 函数的前两个参数指定的是一个画布被分割的行数和列数,最后一个参数则指定的是当前绘制区域的位置编号,编号规则是行优先。
例如,图 2 中有 3 个子图:
多个子图的位置示意图如下图所示:

图 3 多个子图的位置示意图
使用 subpot() 函数在画布中绘图时,每次都要调用它指定绘图区域非常麻烦,相比之下,subplots() 函数则更直接,它会事先把画布区域分割好。
subplot() 函数直接指定划分方式和位置,它可以将一个绘图区域划分为 n 个子区域,每个 subplot() 函数只能绘制一个子图。
例如,绘制一个 2×3 的区域,subplot(2, 3, 3) 表示将画布分成 2 行 3 列,在第 3 个区域中绘制图表,用坐标表示如下:
(1,1),(1,2),(1,3) (2,1),(2,2),(2,3)如果行列的值都小于 10,那么可以将它们合并写为一个整数,如 subplot(233)。
另外,subplot() 在指定的区域中创建一个轴对象,如果新创建的轴和之前创建的轴重叠,那么之前创建的轴将被删除。
【实例 1】使用 subplot() 函数绘制包含多个子图的空图表。绘制一个 2 行 3 列包含 6 个子图的空图表,程序代码如下:
# 导入matplotlib模块 import matplotlib.pyplot as plt # 绘制一个2行3列包含6个子图的空图表 plt.subplot(2,3,1) plt.subplot(2,3,2) plt.subplot(2,3,3) plt.subplot(2,3,4) plt.subplot(2,3,5) plt.subplot(2,3,6) plt.show() # 显示图表运行程序,结果为:

图 1 包含6个子图的空图表
通过上述示例我们了解了 subplot() 函数的基本用法,接下来将前面所学的简单图表整合到一张图表上,效果如下图所示:

图 2 包含多个子图的图表
程序代码如下:
# 导入matplotlib模块 import matplotlib.pyplot as plt # 第1个子图-折线图 plt.subplot(2,2,1) plt.plot([1, 2, 3, 4, 5]) # 第2个子图-散点图 plt.subplot(2,2,2) plt.plot([1, 2, 3, 4, 5], [2, 5, 8, 12, 18], 'ro') # 第3个子图-柱形图 plt.subplot(2,1,2) x = [1, 2, 3, 4, 5, 6] height = [10, 20, 30, 40, 50, 60] plt.bar(x, height) plt.show() # 显示图表上述示例中有两个关键点一定要掌握:
- 每绘制一个子图都要调用一次 subplot() 函数;
- 要指定绘图区域的位置编号。
subplot() 函数的前两个参数指定的是一个画布被分割的行数和列数,最后一个参数则指定的是当前绘制区域的位置编号,编号规则是行优先。
例如,图 2 中有 3 个子图:
- 第 1 个子图 subplot(2, 2, 1),即将画布分成 2 行 2 列,在第 1 个子图中绘制折线图;
- 第 2 个子图 subplot(2, 2, 2),即将画布分成 2 行 2 列,在第 2 个子图中绘制散点图;
- 第 3 个子图 subplot(2, 1, 2),即将画布分成 2 行 1 列,由于第 1 行已经占用,所以在第 2 行,也就是第 3 个子图中绘制柱形图。
多个子图的位置示意图如下图所示:

图 3 多个子图的位置示意图
使用 subpot() 函数在画布中绘图时,每次都要调用它指定绘图区域非常麻烦,相比之下,subplots() 函数则更直接,它会事先把画布区域分割好。