Matplotlib subplots 函数
Matplotlib 是一个用于数据可视化的 Python 库,提供了各种图表类型和绘图工具。其中的 subplots 函数可以用于在同一图表中绘制多个子图,可以方便地进行比较和展示。
阅读更多:Matplotlib 教程
Subplots 的基本用法
在 Matplotlib 中调用 subplots 函数可以得到一个包含多个子图的图表对象和包含子图的坐标轴对象的数组。下面是一个具有两个子图的示例:
其中,fig
为整个图表对象,axs
为包含子图的坐标轴对象的数组。参数 1, 2
表示将在一行中创建两个子图,figsize
参数可以设置整个图表的大小。
每个子图可以使用索引访问,例如 axs[0]
和 axs[1]
分别表示第一个和第二个子图。下面是向第一个子图中添加一个散点图的示例:
问题:如何在同一张图里绘制超过 9 个子图?
使用 subplots 函数时,可以传入类似 (3, 3)
的参数来创建 9 个子图,也可以传入类似 (3, 4)
的参数来创建 12 个子图。但当需要绘制更多的子图时,该如何实现呢?
思路一:创建多个 subplots
一种方案是创建多个 subplots,然后将它们组合在一起。例如,如下示例代码可以创建一个包含 16 个子图的图表:
该图表将被分成 4 行和 4 列,共 16 个子图。这些子图可以分别绘制不同的内容,然后使用 plt.subplots_adjust
函数将它们组合在一起。可以调整 left
、right
、bottom
、top
参数以控制子图之间的空白:
这里的 wspace
和 hspace
参数用于控制子图之间的宽度和高度。
完整的示例代码如下:
该代码会在每个子图中绘制一个散点图,并将 x 和 y 轴的刻度标签设置为空。最后,使用 plt.show()
函数显示图表。
思路二:使用 GridSpec
另一种方案是使用 Matplotlib 中的 GridSpec,该模块可以灵活地创建基于网格的布局。GridSpec 可以用于创建更复杂的布局,例如网格中的空白或非等宽行列。
下面是用 GridSpec 创建一个包含 16 个子图的图表的示例代码:
该代码将一个包含 16 个子图的网格创建为 GridSpec 对象 gs
,然后使用 fig.add_subplot
方法将每个子图添加到该网格中。每个子图使用索引进行访问,例如 axs[0]
表示网格中的第一个子图。
同样,每个子图在这里仍然绘制一个散点图,然后使用 set
方法将 x 和 y 轴的刻度标签设置为空。最后,使用 plt.show()
函数显示图表。
总结
本文介绍了在 Matplotlib 中绘制多个子图的基本用法及两种实现绘制 9 个以上子图的方案,包括创建多个 subplots 和使用 GridSpec。通过灵活使用这些方法,可以轻松绘制包含多个子图的图表,为数据可视化带来更多的便利性。