自定义 Matplotlib 坐标轴和颜色条

PythonPythonBeginner
立即练习

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

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

简介

Matplotlib 是一个 Python 库,可用于在 Python 中创建静态、动画和交互式可视化。它广泛应用于科学计算、数据分析、机器学习等领域。在本实验中,你将学习如何使用 Matplotlib 绘制图像,以及如何操作坐标轴和颜色条的位置。

虚拟机使用提示

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

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

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

导入库

在这一步中,我们将导入本实验中会用到的必要库。我们将使用 matplotlib 中的 matplotlib.pyplotcbook 来获取一个示例图像。

import matplotlib.pyplot as plt
from matplotlib import cbook

获取示例图像

在这一步中,我们将定义一个函数来获取一张示例图像及其范围。我们将使用 cbook 中的 get_sample_data() 函数来获取一张示例图像。

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

简单图像与颜色条

在这一步中,我们将创建一个简单的图像及其颜色条。我们将使用 pyplot 中的 imshow() 函数来创建图像,并使用 colorbar() 函数来创建颜色条。

def demo_simple_image(ax):
    Z, extent = get_demo_image()

    im = ax.imshow(Z, extent=extent)
    cb = plt.colorbar(im)
    cb.ax.yaxis.set_tick_params(labelright=False)

绘制时定位的图像与颜色条 - 一种复杂的方法

在这一步中,我们将以一种复杂的方式创建一个图像及其颜色条,并在绘制时进行定位。我们将使用 mpl_toolkits.axes_grid1 中的 SubplotDivider 为坐标轴和颜色条创建一个分隔器。

def demo_locatable_axes_hard(fig):
    from mpl_toolkits.axes_grid1 import Size, SubplotDivider

    divider = SubplotDivider(fig, 2, 2, 2, aspect=True)

    ## 用于图像的坐标轴
    ax = fig.add_subplot(axes_locator=divider.new_locator(nx=0, ny=0))
    ## 用于颜色条的坐标轴
    ax_cb = fig.add_subplot(axes_locator=divider.new_locator(nx=2, ny=0))

    divider.set_horizontal([
        Size.AxesX(ax),  ## 主坐标轴
        Size.Fixed(0.05),  ## 填充,0.1 英寸
        Size.Fixed(0.2),  ## 颜色条,0.3 英寸
    ])
    divider.set_vertical([Size.AxesY(ax)])

    Z, extent = get_demo_image()

    im = ax.imshow(Z, extent=extent)
    plt.colorbar(im, cax=ax_cb)
    ax_cb.yaxis.set_tick_params(labelright=False)

绘制时定位的图像与颜色条 - 一种简单的方法

在这一步中,我们将以一种简单的方式创建一个图像及其颜色条,并在绘制时进行定位。我们将使用 mpl_toolkits.axes_grid1 中的 make_axes_locatable 为坐标轴和颜色条创建一个分隔器。

def demo_locatable_axes_easy(ax):
    from mpl_toolkits.axes_grid1 import make_axes_locatable

    divider = make_axes_locatable(ax)

    ax_cb = divider.append_axes("right", size="5%", pad=0.05)
    fig = ax.get_figure()
    fig.add_axes(ax_cb)

    Z, extent = get_demo_image()
    im = ax.imshow(Z, extent=extent)

    plt.colorbar(im, cax=ax_cb)
    ax_cb.yaxis.tick_right()
    ax_cb.yaxis.set_tick_params(labelright=False)

带有固定间距的并排双图像

在这一步中,我们将创建两个并排的图像,并带有固定的间距。我们将使用 mpl_toolkits.axes_grid1 中的 make_axes_locatable 为坐标轴和颜色条创建一个分隔器。

def demo_images_side_by_side(ax):
    from mpl_toolkits.axes_grid1 import make_axes_locatable

    divider = make_axes_locatable(ax)

    Z, extent = get_demo_image()
    ax2 = divider.append_axes("right", size="100%", pad=0.05)
    fig1 = ax.get_figure()
    fig1.add_axes(ax2)

    ax.imshow(Z, extent=extent)
    ax2.imshow(Z, extent=extent)
    ax2.yaxis.set_tick_params(labelleft=False)

绘图

在这一步中,我们将创建一个图形,并为我们要创建的每个图像添加子图。

def demo():
    fig = plt.figure(figsize=(6, 6))

    ## 图 1
    ## 简单图像和颜色条
    ax = fig.add_subplot(2, 2, 1)
    demo_simple_image(ax)

    ## 图 2
    ## 绘制时定位的图像和颜色条 - 一种复杂的方法
    demo_locatable_axes_hard(fig)

    ## 图 3
    ## 绘制时定位的图像和颜色条 - 一种简单的方法
    ax = fig.add_subplot(2, 2, 3)
    demo_locatable_axes_easy(ax)

    ## 图 4
    ## 带有固定间距的并排双图像。
    ax = fig.add_subplot(2, 2, 4)
    demo_images_side_by_side(ax)

    plt.show()

总结

在这个实验中,我们学习了如何使用 Matplotlib 绘制图像,以及如何操作坐标轴和颜色条的位置。我们涵盖了创建图像和颜色条的不同方法,以及如何在图形中定位它们。通过从这个实验中获得的知识,你将能够创建更复杂的可视化效果,并根据自己的需求对其进行操作。