如何使用subplot函数在同一幅图中绘制多个子图?

作者:保定麻将开发公司 阅读:30 次 发布时间:2025-06-30 20:57:46

摘要:随着日益增长的数据分析和可视化应用,我们越来越需要在同一张绘图区中绘制多个小图,以便更好地展示数据之间的关系。对于 Python 语言中的数据可视化工具 Matplotlib,其中的 subplot 函数就能帮助我们完成这个任务。在本文中,我们将介绍如何使用 subplot 函数在同一幅图中...

随着日益增长的数据分析和可视化应用,我们越来越需要在同一张绘图区中绘制多个小图,以便更好地展示数据之间的关系。对于 Python 语言中的数据可视化工具 Matplotlib,其中的 subplot 函数就能帮助我们完成这个任务。

如何使用subplot函数在同一幅图中绘制多个子图?

在本文中,我们将介绍如何使用 subplot 函数在同一幅图中绘制多个子图,并讲解该函数的使用方法、参数说明和常用技巧。

1. subplot 函数简介

subplot 函数是 Matplotlib 中的一个子图创建函数,其作用是在一个大的绘图区域内创建并排或堆叠的多个小图,便于在一个图中展示多个变量或多个数据集的统计信息。

该函数的基本语法如下:

```python

matplotlib.pyplot.subplot(nrows, ncols, index, **kwargs)

```

其中,nrows 和 ncols 表示子图网格的行数和列数,index 表示当前子图的位置(从 1 开始,按行从左到右、按列从上到下编号),**kwargs 是其他可选参数。

例如,若创建 2 行 2 列共 4 个子图,可以如下调用 subplot 函数:

```python

import matplotlib.pyplot as plt

plt.subplot(2, 2, 1) # 第一行第一列

plt.subplot(2, 2, 2) # 第一行第二列

plt.subplot(2, 2, 3) # 第二行第一列

plt.subplot(2, 2, 4) # 第二行第二列

```

此时会得到如下图所示的网格布局:

![subplot-1.webp](https://i.loli.net/2021/08/26/dMECn26aARZbys3.webp)

其中,每个小图占据了网格中的一个位置。我们可以在每个子图中通过其他 Matplotlib 函数绘制所需的图形和数据。

2. subplot 函数的使用方法

除了上述基本语法外,subplot 函数还有许多其他的使用方法和技巧,我们将在下面的小节中进行详细讲解。

(1)创建不同尺寸的子图

在默认情况下,subplot 函数会将所有子图平均分布在网格中,即每个子图大小相同。但实际上,我们还可以根据需要创建不同尺寸的子图,以更好地展示数据。

这时,我们可以分别通过 subplot2grid 函数创建子网格,并在其中绘制数据,例如:

```python

import matplotlib.pyplot as plt

plt.subplot2grid((3, 3), (0, 0), colspan=3) # 第一行,占 3 列

plt.subplot2grid((3, 3), (1, 0), colspan=2) # 第二行,占 2 列

plt.subplot2grid((3, 3), (1, 2), rowspan=2) # 第二行第三列,占 2 行

plt.subplot2grid((3, 3), (2, 0)) # 第三行第一列

plt.subplot2grid((3, 3), (2, 1)) # 第三行第二列

```

运行结果如下:

![subplot-2.webp](https://i.loli.net/2021/08/26/2sHac9z7Rxu4PdM.webp)

注意,subplot2grid 函数的第一个参数是网格的形状,如 (3, 3) 表示创建一个 3 行 3 列的网格;第二个参数是当前子图在网格中的位置,如 (0, 0) 表示第一行第一列;而 colspan 和 rowspan 则分别表示当前子图所占据的列数和行数,默认为 1。

(2)使用 add_subplot 函数创建子图

除了 subplot2grid,Matplotlib 还提供了 add_subplot 函数用于创建子图。该函数的用法与 subplot 类似,但需要注意的是,add_subplot 函数需要先创建一个父图对象 Figure,然后在该对象上创建子图。

例如,我们可以如下创建一个 2 行 3 列的子图:

```python

import matplotlib.pyplot as plt

fig = plt.figure()

fig.add_subplot(2, 3, 1)

fig.add_subplot(2, 3, 2)

fig.add_subplot(2, 3, 3)

fig.add_subplot(2, 3, 4)

fig.add_subplot(2, 3, 5)

fig.add_subplot(2, 3, 6)

```

这时,我们可以分别在每个子图上调用其他 Matplotlib 函数进行数据可视化。

(3)使用 subplots 函数创建多个子图

除了以上两种方法,Matplotlib 还提供了 subplots 函数用于同时创建多个子图。该函数返回一个元组,其中包含了创建的所有子图对象,可以方便地对每个子图进行处理。

例如,我们可以如下创建一个 2 行 2 列、共 4 个子图的图像:

```python

import matplotlib.pyplot as plt

fig, axes = plt.subplots(nrows=2, ncols=2)

axes[0, 0].plot([1, 2, 3], [3, 2, 1])

axes[0, 1].scatter([1, 2, 3], [3, 2, 1])

axes[1, 0].bar([1, 2, 3], [3, 2, 1])

axes[1, 1].pie([1, 2, 3])

```

这里,我们可以使用 axes 对象来分别控制每个子图的绘制,例如在 axes[0, 0] 上绘制折线图,在 axes[1, 0] 上绘制柱状图等。

3. 高级技巧与应用

除了以上基本用法外,subplot 函数还有许多高级技巧和应用,我们下面将介绍其中的一些。

(1)创建网格线和间距

在默认情况下,subplot 函数创建的网格通常没有边框和间距,导致图形不易阅读。这时,我们可以使用局部参数来增加网格的边框和间距,例如:

```python

import matplotlib.pyplot as plt

plt.subplot(2, 2, 1, facecolor='w') # 设置第一个子图的背景色为白色

plt.subplot(2, 2, 2, frameon=False) # 去掉第二个子图的边框

plt.subplot(2, 2, 3, sharex=ax1) # 让第三个子图与第一个子图共享 x 轴

plt.subplot(2, 2, 4, aspect=1) # 把第四个子图的宽高比设置为 1:1

```

其中,facecolor、frameon、sharex、aspect 等参数分别代表背景色、是否显示边框、共享的轴和宽高比等。

(2)显示子图标题和坐标轴标签

除了绘制数据之外,Matplotlib 还支持在子图中添加标题、坐标轴标签和注释等文本信息,从而更好地表达数据和传达分析结论。

例如,我们可以使用 title、xlabel、ylabel、text 等函数来分别添加标题、x 轴和 y 轴标签,以及注释信息:

```python

import matplotlib.pyplot as plt

plt.subplot(2, 2, 1)

plt.plot([1, 2, 3], [3, 2, 1])

plt.title('Line plot')

plt.xlabel('X Axis')

plt.ylabel('Y Axis')

plt.text(2, 2, 'Max Value')

plt.subplot(2, 2, 2)

plt.scatter([1, 2, 3], [3, 2, 1])

plt.title('Scatter plot')

plt.xlabel('X Axis')

plt.ylabel('Y Axis')

plt.text(2, 2, 'Min Value')

```

这时,我们可以在每个子图中相应位置看到标题和坐标轴标签的文本信息,以及注释信息的位置。

(3)创建不同类型的子图

最后,除了上述基本的二维子图之外,Matplotlib 还支持创建多种类型的子图,如 3D 图形、热力图、等高线图、极坐标图和地图等。

例如,我们可以使用 Axes3d 子模块创建 3D 散点图:

```python

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D

import numpy as np

fig = plt.figure()

ax = fig.add_subplot(111, projection='3d')

x = np.random.normal(size=100)

y = np.random.normal(size=100)

z = np.random.normal(size=100)

ax.scatter(x, y, z)

ax.set_xlabel('X Label')

ax.set_ylabel('Y Label')

ax.set_zlabel('Z Label')

```

这里我们首先导入 Axes3D 子模块,然后在创建 Figure 对象时,使用 projection='3d' 参数来指定 3D 坐标系。接着,我们可以使用 scatter 函数来绘制 3D 散点图,并用 set_xlabel、set_ylabel、set_zlabel 函数分别设置 x、y、z 轴标签。

使用类似的方式,我们还可以创建热力图、等高线图、极坐标图和地图等多种类型的子图,便于在数据探索和分析过程中更全面地呈现数据的特征和趋势。

4. 总结

本文介绍了 Matplotlib 中 subplot 函数的基本用法和高级技巧,包括如何创建不同尺寸的子图、使用 add_subplot 创建子图、使用 subplots 创建多个子图、创建网格线和间距、显示子图标题和坐标轴标签、创建不同类型的子图等。

通过掌握这些用法和技巧,我们可以更好地利用 Matplotlib 进行数据可视化,从而更深入地洞察数据的内在规律和趋势,为数据分析和决策提供有力支持。

  • 原标题:如何使用subplot函数在同一幅图中绘制多个子图?

  • 本文链接:https://qipaikaifa.cn/zxzx/244552.html

  • 本文由深圳中天华智网小编,整理排版发布,转载请注明出处。部分文章图片来源于网络,如有侵权,请与中天华智网联系删除。
  • 微信二维码

    ZTHZ2028

    长按复制微信号,添加好友

    微信联系

    在线咨询

    点击这里给我发消息QQ客服专员


    点击这里给我发消息电话客服专员


    在线咨询

    免费通话


    24h咨询☎️:157-1842-0347


    🔺🔺 棋牌游戏开发24H咨询电话 🔺🔺

    免费通话
    返回顶部