在 Matplotlib 中创建自定义颜色条刻度

Beginner

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

简介

在数据可视化中,颜色条用于使用颜色表示数据集的值范围。Matplotlib 是一个用于创建各种可视化效果的 Python 库,包括颜色条。在本实验中,我们将学习如何在 Matplotlib 中自定义颜色条上的刻度标签。

虚拟机使用提示

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

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

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

导入必要的库并设置随机种子

首先,我们需要导入必要的库,并设置随机种子以确保可重复性。我们将使用 numpy 生成一些随机数据,使用 matplotlib.pyplot 创建可视化效果,并使用 matplotlib 中的 cm 定义颜色映射。

import matplotlib.pyplot as plt
import numpy as np
from numpy.random import randn

from matplotlib import cm

## Fixing random state for reproducibility
np.random.seed(19680801)

创建一个带有垂直颜色条的绘图

我们将从创建一个带有垂直颜色条的绘图开始。我们将使用 numpy 中的 randn 生成一些随机数据,并将值裁剪到 -1 到 1 的范围内。然后,我们将使用 imshowcoolwarm 颜色映射创建一个 AxesImage 对象。最后,我们将为绘图添加一个标题。

## Make plot with vertical (default) colorbar
fig, ax = plt.subplots()

data = np.clip(randn(250, 250), -1, 1)

cax = ax.imshow(data, cmap=cm.coolwarm)
ax.set_title('Gaussian noise with vertical colorbar')

自定义垂直颜色条上的刻度标签

接下来,我们将自定义垂直颜色条上的刻度标签。我们将使用 colorbar 创建一个颜色条,并使用 ticks 参数指定刻度位置。然后,我们将在颜色条对象的 ax 属性上使用 set_yticklabels 设置刻度标签。

## Add colorbar, make sure to specify tick locations to match desired ticklabels
cbar = fig.colorbar(cax, ticks=[-1, 0, 1])
cbar.ax.set_yticklabels(['< -1', '0', '> 1'])  ## vertically oriented colorbar

创建一个带有水平颜色条的绘图

现在我们将创建一个带有水平颜色条的绘图。我们将遵循与步骤 2 相同的步骤,但这次我们将使用 afmhot 颜色映射,并将颜色条的方向设置为水平。

## Make plot with horizontal colorbar
fig, ax = plt.subplots()

data = np.clip(randn(250, 250), -1, 1)

cax = ax.imshow(data, cmap=cm.afmhot)
ax.set_title('Gaussian noise with horizontal colorbar')

cbar = fig.colorbar(cax, ticks=[-1, 0, 1], orientation='horizontal')
cbar.ax.set_xticklabels(['Low', 'Medium', 'High'])  ## horizontal colorbar

显示绘图

最后,我们将使用 plt.show() 显示绘图。

plt.show()

总结

在本实验中,我们学习了如何在 Matplotlib 中自定义颜色条上的刻度标签。我们首先创建了一个带有垂直颜色条的绘图,并使用 set_yticklabels 自定义刻度标签。然后,我们创建了一个带有水平颜色条的绘图,并使用 set_xticklabels 自定义刻度标签。在颜色条上自定义刻度标签有助于使你的可视化效果更具信息性且更易于阅读。