matplotlib subplots

matplotlib subplots

参考:Matplotlib subplots

1. 简介

matplotlib 是一个用于绘制数据可视化图形的强大库,而subplots 则是 matplotlib 中的一个模块,用于在一个图像中创建多个子图。subplots 提供了一种简单的方式来管理并组织绘制多个子图,使得我们能够更清晰地展示和比较不同的数据。

本文将详细介绍 subplots 的基本概念、常用方法及其一些高级使用技巧,希望能够帮助读者更好地理解和使用 matplotlib subplots

2. subplots 初探

在使用 subplots 之前,我们首先需要了解 FigureAxes 这两个概念。Figure 是整个图像的最外层容器,而 Axes 则是实际绘图区域。一个 Figure 可以包含一个或多个 Axes

接下来,我们通过一个简单的例子来演示 subplots 的基本使用。

首先,我们需要导入 matplotlib 并指定使用 inline 模式进行绘图,并导入 numpy 包以生成一些随机数据:

import matplotlib.pyplot as plt
import numpy as np

# 在 notebook 中显示图像
%matplotlib inline

# 生成随机数据
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)

然后,我们可以使用 subplots 方法创建一个包含一个子图的 FigureAxes 对象,并使用 plot 方法绘制数据:

fig, ax = plt.subplots()
ax.plot(x, y)

运行上述代码后,会显示出一个包含一条正弦曲线的子图。

3. 创建多个子图

现在,我们将演示如何在一个图像上创建多个子图。我们可以使用 subplotsnrowsncols 参数来指定需要创建的子图的行数和列数。例如,下面的代码将创建一个包含 2 行 2 列的图像,并在每个子图上绘制随机数据:

# 生成随机数据
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)
y4 = np.exp(x)

# 创建 2x2 的图像,并将其分割成 4 个子图
fig, axes = plt.subplots(nrows=2, ncols=2)

# 在每个子图上绘制数据
axes[0, 0].plot(x, y1)
axes[0, 0].set_title('Sin')

axes[0, 1].plot(x, y2)
axes[0, 1].set_title('Cos')

axes[1, 0].plot(x, y3)
axes[1, 0].set_title('Tan')

axes[1, 1].plot(x, y4)
axes[1, 1].set_title('Exp')

# 调整子图之间的距离
plt.tight_layout()

运行上述代码后,会显示一个包含 2 行 2 列的图像,每个子图上都绘制有不同的随机数据。

4. 改变图像的大小和比例

subplots 提供了多种方法来改变图像的大小和比例。首先,我们可以在创建 Figure 对象时指定 figsize 参数来设置图像的大小,其默认值为 (6.4, 4.8),单位是英寸。

# 设置图像的大小为 8x6 英寸
fig, ax = plt.subplots(figsize=(8, 6))

此外,我们还可以使用 subplots_adjust 方法来调整图像的边距和间距,以便更好地适应某些输出设备。下面的代码将演示如何调整图像的边距和间距:

# 生成随机数据
y1 = np.sin(x)
y2 = np.cos(x)

# 创建一个包含 1 行 2 列的图像
fig, axes = plt.subplots(nrows=1, ncols=2)

# 在第一个子图上绘制数据
axes[0].plot(x, y1)
axes[0].set_title('Sin')

# 在第二个子图上绘制数据
axes[1].plot(x, y2)
axes[1].set_title('Cos')

# 调整图像的边距和间距
plt.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9, wspace=0.4, hspace=0.4)

上述代码将生成一个包含 1 行 2 列的图像,每个子图上都绘制有不同的随机数据。

5. 高级使用技巧

除了基本的使用方法之外,subplots 还支持一些高级的使用技巧,如共享坐标轴、设置标题和标签等。

5.1 共享坐标轴

当我们在一个图像中创建多个子图时,有时候我们会希望其中一些子图共享相同的坐标轴,以便更好地比较它们之间的数据。

例如,下面的代码将创建一个包含 2 行 2 列的图像,并设置第一行的子图共享 x 轴,第二列的子图共享 y 轴:

# 生成随机数据
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)

# 创建 2x2 的图像,并将其分割成 4 个子图
fig, axes = plt.subplots(nrows=2, ncols=2, sharex='col', sharey='row')

# 在第一行的子图上绘制数据
axes[0, 0].plot(x, y1)
axes[0, 0].set_title('Sin')

axes[0, 1].plot(x, y2)
axes[0, 1].set_title('Cos')

# 在第二行的子图上绘制数据
axes[1, 0].plot(x, y3)
axes[1, 0].set_title('Tan')

# 调整子图之间的距离
plt.tight_layout()

上述代码将生成一个包含 2 行 2 列的图像,其中第一行的子图共享 x 轴,第二列的子图共享 y 轴。

5.2 设置标题和标签

我们可以使用 set_title 方法为图像设置标题,使用 set_xlabelset_ylabel 方法为坐标轴设置标签。这些方法接受一个字符串作为参数,并将其用作标题或标签的文本。

例如,下面的代码将创建一个包含 2 行 2 列的图像,并为每个子图设置不同的标题和坐标轴标签:

# 生成随机数据
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)
y4 = np.exp(x)

# 创建 2x2 的图像,并将其分割成 4 个子图
fig, axes = plt.subplots(nrows=2, ncols=2)

# 在第一个子图上绘制数据,并设置标题和坐标轴标签
axes[0, 0].plot(x, y1)
axes[0, 0].set_title('Sin')
axes[0, 0].set_xlabel('x')
axes[0, 0].set_ylabel('y')

# 在第二个子图上绘制数据,并设置标题和坐标轴标签
axes[0, 1].plot(x, y2)
axes[0, 1].set_title('Cos')
axes[0, 1].set_xlabel('x')
axes[0, 1].set_ylabel('y')

# 在第三个子图上绘制数据,并设置标题和坐标轴标签
axes[1, 0].plot(x, y3)
axes[1, 0].set_title('Tan')
axes[1, 0].set_xlabel('x')
axes[1, 0].set_ylabel('y')

# 在第四个子图上绘制数据,并设置标题和坐标轴标签
axes[1, 1].plot(x, y4)
axes[1, 1].set_title('Exp')
axes[1, 1].set_xlabel('x')
axes[1, 1].set_ylabel('y')

# 调整子图之间的距离
plt.tight_layout()

上述代码将生成一个包含 2 行 2 列的图像,每个子图上都绘制有不同的随机数据,并为每个子图设置了标题和坐标轴标签。

6. 总结

本文详细介绍了 matplotlib subplots 的基本概念、常用方法以及一些高级使用技巧。我们可以使用 subplots 在一个图像中创建和管理多个子图,并通过调整图像的大小、坐标轴、标题和标签等来更清晰地展示和比较不同的数据。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程