Matplotlib 子图函数
在 Matplotlib 库中,我们可以使用 subplot() 函数在来同时绘制多个子图。
语法:
plt.subplot(rows, cols, index)说明:
subplot() 函数有 3 个参数。rows 是行数,cols 是列数,index 是子图位置。其中,index 的值是从 1 开始到 rows × cols 结束。
示例 1:Matplotlib 绘制子图
import matplotlib.pyplot as plt
# 设置
plt.rcParams['font.family'] = ['SimHei', 'PingFang SC']
plt.rcParams['axes.unicode_minus'] = False
# 绘制折线图
def drawplot():
x = [1, 2, 3, 4]
y = [16, 15, 18, 17]
plt.plot(x, y)
plt.title('折线图')
plt.xlabel('x轴标题')
plt.ylabel('y轴标题')
plt.subplot(2, 2, 1)
drawplot()
# 显示
plt.show()运行之后,效果如下图所示。

分析:
plt.subplot(2, 2, 1) 表示将画布划分为 2 × 2 = 4 个子区域,此时整个画布布局如下图所示。这里的 1 表示在第 1 个区域中绘制当前图表。subplot() 函数的前 2 个参数用于确定画布的布局(有多少行多少列),最后一个参数用于定义在哪个子区域绘图。

当我们将 plt.subplot(2, 2, 1) 改为 plt.subplot(2, 2, 2),此时效果如下图所示。当将 plt.subplot(2, 2, 1) 改为 plt.subplot(2, 2, 3),此时效果如下图所示。


此外需要清楚的是,对于 subplot() 函数来说,它其实有 2 种语法方式。对于这个例子来说,下面 2 种方式是等价的。
# 方式1
plt.subplot(2, 2, 1)
# 方式2
plt.subplot(221)Matplotlib 子图案例
接下来我们尝试绘制一个 2 × 2 的组合图表,也就是在同一张画布上绘制 4 种不同的图表:折线图、散点图、柱状图、饼状图。
示例 2:Matplotlib 子图的应用
import matplotlib.pyplot as plt
# 设置
plt.rcParams['font.family'] = ['SimHei', 'PingFang SC']
plt.rcParams['axes.unicode_minus'] = False
# 绘制折线图
def drawplot():
x = [1, 2, 3, 4]
y = [16, 15, 18, 17]
plt.plot(x, y)
# 绘制散点图
def drawscatter():
x = [1, 2, 3, 4, 5, 6, 7, 8]
y = [15, 12, 14, 12, 11, 14, 13, 12]
plt.scatter(x, y)
# 绘制柱形图
def drawbar():
x = [1, 2, 3, 4, 5]
y = [12, 25, 16, 23, 10]
plt.bar(x, y)
# 绘制饼状图
def drawpie():
x = [8.9, 4.1, 12.1, 8.5, 11.5]
movies = ['蜘蛛侠', '蝙蝠侠', '钢铁侠', '毒液', '海王']
plt.pie(x,
labels = movies,
explode = (0.1, 0, 0, 0, 0),
autopct = '%1.1f%%'
)
# 绘图
plt.subplot(2, 2, 1)
drawplot()
plt.subplot(2, 2, 2)
drawscatter()
plt.subplot(2, 2, 3)
drawbar()
plt.subplot(2, 2, 4)
drawpie()
# 调整布局
plt.tight_layout()
# 显示图表
plt.show()运行之后,效果如下图所示。

分析:
这个例子代码虽然比较多,但是逻辑是非常清晰简单的。其中 plt.tight_layout() 用于调整子图之间的布局,如果没有这一句代码,子图之间就可能出现重叠的情况。
