自定义颜色条教程#

本教程展示如何构建和自定义独立颜色条,即没有附加的绘图。

一个 colorbar 需要一个 "可映射" (matplotlib.cm.ScalarMappable) 对象(通常是图像),它指示要使用的颜色映射和规范。为了创建没有附加图像的颜色条,可以使用一个没有关联数据的 ScalarMappable

import matplotlib.pyplot as plt
import matplotlib as mpl

基本连续颜色条#

在这里,我们创建了一个带有刻度和标签的基本连续颜色条。

colorbar 调用的参数是 ScalarMappable(使用 normcmap 参数构造),颜色条应该绘制到的轴,以及颜色条的方向。

有关更多信息,请参阅 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')
colorbar only

附加到现有轴旁边的颜色条#

本教程中的所有示例(本示例除外)都显示了其自身图形上的独立颜色条,但可以通过将 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')
colorbar only

具有连续颜色比例的离散和扩展颜色条#

以下示例展示了如何基于连续 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")
colorbar only

具有任意颜色的颜色条#

以下示例仍然使用 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',
)
colorbar only

具有自定义扩展长度的颜色条#

我们可以自定义离散区间颜色条的扩展长度。为了使每个扩展的长度与内部颜色的长度相同,请使用 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()
colorbar only

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

由 Sphinx-Gallery 生成的图库