使用 Matplotlib 创建图像网格

PythonPythonBeginner
立即练习

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

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本教程将演示如何使用Matplotlib的 ImageGrid 创建图像网格。我们将创建一个2x2的图像网格,并探索向网格添加颜色条的各种方法。

虚拟机使用提示

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

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

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

导入必要的库和数据

我们首先需要导入必要的库和数据来创建我们的网格。我们将使用 matplotlib.pyplot 进行绘图,使用 cbook 获取示例数据集,并使用 ImageGrid 创建我们的网格。

import matplotlib.pyplot as plt
from matplotlib import cbook
from mpl_toolkits.axes_grid1 import ImageGrid

## 获取示例数据
Z = cbook.get_sample_data("axes_grid/bivariate_normal.npy")  ## 15x15 数组
extent = (-3, 4, -4, 3)

创建一个带有单个颜色条的 2x2 图像网格

我们的第一个网格将是一个带有单个颜色条的 2x2 图像网格。我们将使用 ImageGrid 函数来创建网格,并指定我们想要的行数和列数。我们还将指定颜色条的位置,并将 share_all 设置为 True,以便在所有图像之间共享颜色条。

## 创建一个带有单个颜色条的 2x2 图像网格
grid = ImageGrid(
    fig,  ## 图形对象
    141,  ## 子图位置
    nrows_ncols=(2, 2),  ## 行数和列数
    axes_pad=0.0,  ## 轴之间的间距
    label_mode="L",  ## 标签模式
    share_all=True,  ## 在所有图像之间共享颜色条
    cbar_location="top",  ## 颜色条位置
    cbar_mode="single"  ## 颜色条模式
)

## 在网格上绘制图像
for ax in grid:
    im = ax.imshow(Z, extent=extent)

## 向网格添加颜色条
grid.cbar_axes[0].colorbar(im)
for cax in grid.cbar_axes:
    cax.tick_params(labeltop=False)

创建一个 2x2 图像网格,每个图像都有自己的颜色条

我们的下一个网格将是一个 2x2 图像网格,每个图像都有自己的颜色条。我们将再次使用 ImageGrid 函数,但这次我们将 cbar_mode 设置为 "each",以指定每个图像都应该有自己的颜色条。

## 创建一个 2x2 图像网格,每个图像都有自己的颜色条
grid = ImageGrid(
    fig,  ## 图形对象
    142,  ## 子图位置
    nrows_ncols=(2, 2),  ## 行数和列数
    axes_pad=0.1,  ## 轴之间的间距
    label_mode="1",  ## 标签模式
    share_all=True,  ## 在所有图像之间共享颜色条
    cbar_location="top",  ## 颜色条位置
    cbar_mode="each",  ## 颜色条模式
    cbar_size="7%",  ## 颜色条大小
    cbar_pad="2%"  ## 颜色条与图像之间的间距
)

## 在网格上绘制图像并添加颜色条
for ax, cax in zip(grid, grid.cbar_axes):
    im = ax.imshow(Z, extent=extent)
    cax.colorbar(im)
    cax.tick_params(labeltop=False)

创建一个 2x2 图像网格,每个图像都有自己的颜色条且颜色条范围不同

我们的最后一个网格同样是一个 2x2 图像网格,每个图像都有自己的颜色条,但这次我们将为每个图像使用不同的颜色条范围。在绘制每个图像时,我们将使用 vminvmax 设置颜色条范围。

## 创建一个 2x2 图像网格,每个图像都有自己的颜色条且颜色条范围不同
grid = ImageGrid(
    fig,  ## 图形对象
    143,  ## 子图位置
    nrows_ncols=(2, 2),  ## 行数和列数
    axes_pad=(0.45, 0.15),  ## 轴之间的间距
    label_mode="1",  ## 标签模式
    share_all=True,  ## 在所有图像之间共享颜色条
    cbar_location="right",  ## 颜色条位置
    cbar_mode="each",  ## 颜色条模式
    cbar_size="7%",  ## 颜色条大小
    cbar_pad="2%"  ## 颜色条与图像之间的间距
)

## 在网格上绘制图像并添加颜色条
limits = ((0, 1), (-2, 2), (-1.7, 1.4), (-1.5, 1))  ## 不同的颜色条范围
for ax, cax, vlim in zip(grid, grid.cbar_axes, limits):
    im = ax.imshow(Z, extent=extent, vmin=vlim[0], vmax=vlim[1])
    cb = cax.colorbar(im)
    cb.set_ticks((vlim[0], vlim[1]))

总结

在本教程中,我们学习了如何使用 Matplotlib 的 ImageGrid 创建图像网格。我们探索了向网格添加颜色条的不同方法,包括为所有图像使用单个颜色条、为每个图像提供其自己的颜色条,以及为每个图像提供其自己的颜色条且颜色条范围不同。