注意
转到末尾下载完整的示例代码。
自定义颜色条教程#
本教程展示了如何构建和自定义独立的颜色条,即不附带绘图的颜色条。
一个颜色条
需要一个“可映射”(matplotlib.cm.ScalarMappable
) 对象(通常是图像),它指示要使用的颜色映射和规范。为了创建不带附加图像的颜色条,可以使用不带关联数据的ScalarMappable
。
import matplotlib.pyplot as plt
import matplotlib as mpl
基本连续颜色条#
在这里,我们创建一个带有刻度和标签的基本连续颜色条。
对colorbar
的调用参数包括:ScalarMappable
(使用norm和cmap参数构造)、颜色条应绘制的坐标轴以及颜色条的方向。
更多信息请参阅colorbar
API。
fig, ax = plt.subplots(figsize=(6, 1), layout='constrained')
cmap = mpl.cm.cool
norm = mpl.colors.Normalize(vmin=5, vmax=10)
fig.colorbar(mpl.cm.ScalarMappable(norm=norm, cmap=cmap),
cax=ax, orientation='horizontal', label='Some Units')

附加到现有坐标轴旁的颜色条#
本教程中的所有示例(除了这一个)都展示了独立于其自身图形的颜色条,但也可以通过将ax=ax
传递给 colorbar() 调用(表示“在ax旁边绘制颜色条”),而不是cax=ax
(表示“在ax上绘制颜色条”),将颜色条显示在现有 Axes ax 旁边。
fig, ax = plt.subplots(layout='constrained')
fig.colorbar(mpl.cm.ScalarMappable(norm=mpl.colors.Normalize(0, 1), cmap='magma'),
ax=ax, orientation='vertical', label='a colorbar label')

具有连续颜色刻度的离散和扩展颜色条#
以下示例展示了如何基于连续 cmap 创建离散颜色条。我们使用matplotlib.colors.BoundaryNorm
来描述区间边界(必须按升序排列),并进一步向其传递extend参数以显示“超限”(over)和“下限”(under)颜色(这些颜色用于规范范围之外的数据)。
fig, ax = plt.subplots(figsize=(6, 1), layout='constrained')
cmap = mpl.cm.viridis
bounds = [-1, 2, 5, 7, 12, 15]
norm = mpl.colors.BoundaryNorm(bounds, cmap.N, extend='both')
fig.colorbar(mpl.cm.ScalarMappable(norm=norm, cmap=cmap),
cax=ax, orientation='horizontal',
label="Discrete intervals with extend='both' keyword")

带有任意颜色的颜色条#
以下示例仍然使用BoundaryNorm
来描述离散区间边界,但现在使用matplotlib.colors.ListedColormap
将每个区间与任意颜色关联起来(区间数量必须与颜色数量相同)。“超限”(over)和“下限”(under)颜色是使用Colormap.with_extremes
在颜色映射上设置的。
我们还会向colorbar
传递额外参数:
为了在颜色条上显示超出范围的值,我们在 colorbar() 调用中使用了extend参数。(这等同于在
BoundaryNorm
构造函数中传递extend参数,如上一个示例所示。)为了使每个颜色条段的长度与其对应的区间成比例,我们在 colorbar() 调用中使用了spacing参数。
fig, ax = plt.subplots(figsize=(6, 1), layout='constrained')
cmap = (mpl.colors.ListedColormap(['red', 'green', 'blue', 'cyan'])
.with_extremes(under='yellow', over='magenta'))
bounds = [1, 2, 4, 7, 8]
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)
fig.colorbar(
mpl.cm.ScalarMappable(cmap=cmap, norm=norm),
cax=ax, orientation='horizontal',
extend='both',
spacing='proportional',
label='Discrete intervals, some other units',
)

具有自定义扩展长度的颜色条#
我们可以自定义具有离散区间的颜色条的扩展长度。要使每个扩展的长度与内部颜色的长度相同,请使用extendfrac='auto'
。
fig, ax = plt.subplots(figsize=(6, 1), layout='constrained')
cmap = (mpl.colors.ListedColormap(['royalblue', 'cyan', 'yellow', 'orange'])
.with_extremes(over='red', under='blue'))
bounds = [-1.0, -0.5, 0.0, 0.5, 1.0]
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)
fig.colorbar(
mpl.cm.ScalarMappable(cmap=cmap, norm=norm),
cax=ax, orientation='horizontal',
extend='both', extendfrac='auto',
spacing='uniform',
label='Custom extension lengths, some other units',
)
plt.show()

脚本总运行时间: (0 分 1.066 秒)