Matplotlib 图像网格颜色条

Beginner

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

简介

本实验是关于使用 Matplotlib 创建带有颜色条的图像网格。提供的示例代码展示了如何为图像网格的每一行或每一列使用一个公共颜色条。

虚拟机使用提示

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

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

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

导入库

首先,我们需要导入必要的库来创建带有颜色条的图像网格。

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

定义图像数据

我们定义一个函数,该函数返回示例图像数据及其范围。

def get_demo_image():
    z = cbook.get_sample_data("axes_grid/bivariate_normal.npy")  ## 15x15 array
    return z, (-3, 4, -4, 3)

创建带有底部颜色条的网格

我们创建一个 2x2 的图像网格,每列都有一个颜色条。

def demo_bottom_cbar(fig):
    grid = AxesGrid(fig, 121,  ## 类似于 subplot(121)
                    nrows_ncols=(2, 2),
                    axes_pad=0.10,
                    share_all=True,
                    label_mode="1",
                    cbar_location="bottom",
                    cbar_mode="edge",
                    cbar_pad=0.25,
                    cbar_size="15%",
                    direction="column"
                    )

    Z, extent = get_demo_image()
    cmaps = ["autumn", "summer"]
    for i in range(4):
        im = grid[i].imshow(Z, extent=extent, cmap=cmaps[i//2])
        if i % 2:
            grid.cbar_axes[i//2].colorbar(im)

    for cax in grid.cbar_axes:
        cax.axis[cax.orientation].set_label("Bar")

    ## 由于 share_all = True,这会影响所有轴。
    grid.axes_llc.set_xticks([-2, 0, 2])
    grid.axes_llc.set_yticks([-2, 0, 2])

创建带有右侧颜色条的网格

我们创建一个 2x2 的图像网格,每行都有一个颜色条。

def demo_right_cbar(fig):
    grid = AxesGrid(fig, 122,  ## 类似于 subplot(122)
                    nrows_ncols=(2, 2),
                    axes_pad=0.10,
                    label_mode="1",
                    share_all=True,
                    cbar_location="right",
                    cbar_mode="edge",
                    cbar_size="7%",
                    cbar_pad="2%",
                    )
    Z, extent = get_demo_image()
    cmaps = ["spring", "winter"]
    for i in range(4):
        im = grid[i].imshow(Z, extent=extent, cmap=cmaps[i//2])
        if i % 2:
            grid.cbar_axes[i//2].colorbar(im)

    for cax in grid.cbar_axes:
        cax.axis[cax.orientation].set_label('Foo')

    ## 因为我们设置了 share_all = True,所以这会影响所有轴。
    grid.axes_llc.set_xticks([-2, 0, 2])
    grid.axes_llc.set_yticks([-2, 0, 2])

创建图形并调用函数

最后,我们创建图形并调用函数来创建带有颜色条的图像网格。

fig = plt.figure()

demo_bottom_cbar(fig)
demo_right_cbar(fig)

plt.show()

总结

Matplotlib 提供了一种使用 AxesGrid 工具包创建带有颜色条的图像网格的简单方法。本实验展示了如何创建一个 2x2 的图像网格,每列都有一个颜色条,以及一个 2x2 的图像网格,每行都有一个颜色条。通过遵循这些步骤,你可以为自己的数据集创建带有颜色条的图像网格。