使用 HBoxDivider 和 VBoxDivider 进行 Matplotlib 子图布局

Beginner

This tutorial is from open-source community. Access the source code

简介

在本实验中,我们将学习如何使用 Matplotlib 通过 HBoxDividerVBoxDivider 类来创建子图。我们将用一个简单的例子展示如何使用这些类来排列多个子图。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到 笔记本 标签页,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们会及时为你解决问题。

导入所需库

我们首先导入所需的库——matplotlibnumpy

import matplotlib.pyplot as plt
import numpy as np

创建数据

我们创建两个 NumPy 数组,用作子图的数据。

arr1 = np.arange(20).reshape((4, 5))
arr2 = np.arange(20).reshape((5, 4))

使用 HBoxDivider 创建子图

我们使用 HBoxDivider 类并排创建两个子图。我们还调整了坐标轴的位置,以便它们具有相等的高度,同时保持其宽高比。

fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.imshow(arr1)
ax2.imshow(arr2)

pad = 0.5  ## 以英寸为单位的间距
divider = HBoxDivider(
    fig, 111,
    horizontal=[Size.AxesX(ax1), Size.Fixed(pad), Size.AxesX(ax2)],
    vertical=[Size.AxesY(ax1), Size.Scaled(1), Size.AxesY(ax2)])
ax1.set_axes_locator(divider.new_locator(0))
ax2.set_axes_locator(divider.new_locator(2))

plt.show()

使用 VBoxDivider 创建子图

我们使用 VBoxDivider 类创建两个上下排列的子图。我们调整坐标轴的位置,以便它们具有相等的宽度,同时保持其宽高比。

fig, (ax1, ax2) = plt.subplots(2, 1)
ax1.imshow(arr1)
ax2.imshow(arr2)

divider = VBoxDivider(
    fig, 111,
    horizontal=[Size.AxesX(ax1), Size.Scaled(1), Size.AxesX(ax2)],
    vertical=[Size.AxesY(ax1), Size.Fixed(pad), Size.AxesY(ax2)])

ax1.set_axes_locator(divider.new_locator(0))
ax2.set_axes_locator(divider.new_locator(2))

plt.show()

总结

在本实验中,我们学习了如何在 Matplotlib 中使用 HBoxDividerVBoxDivider 类来创建子图。我们了解了如何调整坐标轴的位置,以便它们在保持宽高比的同时具有相等的高度或宽度。当我们需要在一个图形中排列多个子图时,这些类会很有用。