Matplotlib subplots 函数

Matplotlib subplots 函数

Matplotlib 是一个用于数据可视化的 Python 库,提供了各种图表类型和绘图工具。其中的 subplots 函数可以用于在同一图表中绘制多个子图,可以方便地进行比较和展示。

阅读更多:Matplotlib 教程

Subplots 的基本用法

Matplotlib 中调用 subplots 函数可以得到一个包含多个子图的图表对象和包含子图的坐标轴对象的数组。下面是一个具有两个子图的示例:

import matplotlib.pyplot as plt

fig, axs = plt.subplots(1, 2, figsize=(10, 5))
Python

其中,fig 为整个图表对象,axs 为包含子图的坐标轴对象的数组。参数 1, 2 表示将在一行中创建两个子图,figsize 参数可以设置整个图表的大小。

每个子图可以使用索引访问,例如 axs[0]axs[1] 分别表示第一个和第二个子图。下面是向第一个子图中添加一个散点图的示例:

axs[0].scatter([1, 2, 3], [4, 5, 6])
Python

问题:如何在同一张图里绘制超过 9 个子图?

使用 subplots 函数时,可以传入类似 (3, 3) 的参数来创建 9 个子图,也可以传入类似 (3, 4) 的参数来创建 12 个子图。但当需要绘制更多的子图时,该如何实现呢?

思路一:创建多个 subplots

一种方案是创建多个 subplots,然后将它们组合在一起。例如,如下示例代码可以创建一个包含 16 个子图的图表:

import matplotlib.pyplot as plt

fig, axs = plt.subplots(4, 4, figsize=(10, 10))
Python

该图表将被分成 4 行和 4 列,共 16 个子图。这些子图可以分别绘制不同的内容,然后使用 plt.subplots_adjust 函数将它们组合在一起。可以调整 leftrightbottomtop 参数以控制子图之间的空白:

plt.subplots_adjust(left=0.1, bottom=0.1, right=0.9, top=0.9, wspace=0.4, hspace=0.4)
Python

这里的 wspacehspace 参数用于控制子图之间的宽度和高度。

完整的示例代码如下:

import matplotlib.pyplot as plt

fig, axs = plt.subplots(4, 4, figsize=(10, 10))

for i, ax in enumerate(axs.flat):
    ax.scatter([i % 10], [i // 10])
    ax.set(xticks=[], yticks=[])

plt.subplots_adjust(left=0.1, bottom=0.1, right=0.9, top=0.9, wspace=0.4, hspace=0.4)

plt.show()
Python

该代码会在每个子图中绘制一个散点图,并将 x 和 y 轴的刻度标签设置为空。最后,使用 plt.show() 函数显示图表。

思路二:使用 GridSpec

另一种方案是使用 Matplotlib 中的 GridSpec,该模块可以灵活地创建基于网格的布局。GridSpec 可以用于创建更复杂的布局,例如网格中的空白或非等宽行列。

下面是用 GridSpec 创建一个包含 16 个子图的图表的示例代码:

import matplotlib.gridspec as gridspec
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(10, 10))
gs = gridspec.GridSpec(4, 4, figure=fig)

for i in range(16):
    ax = fig.add_subplot(gs[i])
    ax.scatter([i % 10], [i // 10])
    ax.set(xticks=[], yticks=[])

plt.show()
Python

该代码将一个包含 16 个子图的网格创建为 GridSpec 对象 gs,然后使用 fig.add_subplot 方法将每个子图添加到该网格中。每个子图使用索引进行访问,例如 axs[0] 表示网格中的第一个子图。

同样,每个子图在这里仍然绘制一个散点图,然后使用 set 方法将 x 和 y 轴的刻度标签设置为空。最后,使用 plt.show() 函数显示图表。

总结

本文介绍了在 Matplotlib 中绘制多个子图的基本用法及两种实现绘制 9 个以上子图的方案,包括创建多个 subplots 和使用 GridSpec。通过灵活使用这些方法,可以轻松绘制包含多个子图的图表,为数据可视化带来更多的便利性。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册