Matplotlib网格子图

  • plt.subplot()绘制子图
  • 调整子图之间的间隔
  • plt.subplots创建网格


plt.subplot()绘制子图

若干彼此对齐的行列子图是常见的可视化任务,matplotlib拥有一些可以轻松创建它们的简便方法。最底层且最常用的方法是plt.subplot()

这个函数在一个网格中创建一个子图,该函数由三个整型参数,依次为将要创建的网格子图行数、列数和索引值,索引值从1开始,从左上到右下递增。

for i in range(1, 7):
    plt.subplot(2, 3, i)
    plt.text(0.5, 0.5, str((2, 3, i)),
        fontsize=18, ha='center')

Matplotlib网格子图_Python数据分析与可视化_matplotlib

调整子图之间的间隔

在上图y轴的刻度有的已经和前面的子图重叠,matplotlib提供plt.subplots_adjust命令调整子图之间的间隔。用面向对象接口的命令fig.add_subplot()可以取得同样的效果。

fig = plt.figure()
fig.subplots_adjust(hspace=0.4, wspace=0.4)
for i in range(1, 7):
    ax = fig.add_subplot(2, 3, i)
    ax.text(0.5, 0.5, str((2, 3, i)),
        fontsize=18, ha='center')

Matplotlib网格子图_Python数据分析与可视化_子图_02

这里我们通过设置 plt.subplots_adjusthspacewspace参数设置与图形高度与宽度一致的子图间距,数值以子图的尺寸为单位。

plt.subplots创建网格

当我们需要创建一个大型网格子图时,就没办法使用前面那种亦步亦趋的方法了,尤其是当你想隐藏内部子图的x轴与y轴标题时。matplotlib提供了plt.subplots()来解决这个问题。

这个函数不是用来创建单个子图的,而是用一行代码创建多个子图,并放回一个包含子图的numpy数组。关键参数是行数与列数以及可选参数sharexsharey

让我们创建一个2 × 3的网格子图,同行使用相同的y坐标,同列使用相同的y轴坐标:

fig, ax = plt.subplots(2, 3, sharex='col', sharey='row')

Matplotlib网格子图_Python数据分析与可视化_子图_03

设置sharexsharey参数后,我们就可以自动去掉网格内部子图的标签。
坐标轴实例网格的放回结果是一个numpy数组,这样就可以通过标准的数组取值方式轻松获取想要的坐标轴了:

fig, ax = plt.subplots(2, 3, sharex='col', sharey='row')
for i in range(2):
    for j in range(3):
        ax[i, j].text(0.5, 0.5, str((i, j)),
            fontsize=18, ha='center')

Matplotlib网格子图_Python数据分析与可视化_数据分析_04