Matplotlib 图像网格颜色条

PythonPythonBeginner
立即练习

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

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

简介

本实验是关于使用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的图像网格,每行都有一个颜色条。通过遵循这些步骤,你可以为自己的数据集创建带有颜色条的图像网格。