Matplotlib 全面使用指南 -- 自定义色标教程 Customized Colorbars Tutorial

发布于:2025-07-16 ⋅ 阅读:(19) ⋅ 点赞:(0)

文中内容仅限技术学习与代码实践参考,市场存在不确定性,技术分析需谨慎验证,不构成任何投资建议。

Matplotlib

自定义色标教程

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

colorbar 需要一个“可映射”(matplotlib.cm.ScalarMappable)对象(通常是一个图像),该对象指示要使用的颜色映射和归一化方式。为了创建一个没有附加图像的色标,可以使用一个没有关联数据的ScalarMappable

import matplotlib.pyplot as plt
import matplotlib as mpl

基本连续色标

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

colorbar调用的参数是ScalarMappable(通过_norm_和_cmap_参数构造),色标要绘制的轴,以及色标的朝向。

更多详细信息请参阅colorbarAPI。

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')

img

附加在现有轴旁边的色标

本教程中的所有示例(除了这一部分)都显示了独立的色标,但也可以通过在colorbar()调用中传递ax=ax(表示“在_ax_旁边绘制色标”)而不是cax=ax(表示“在_ax_上绘制色标”)来将色标显示在现有轴_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')

img

基于连续颜色映射的离散和扩展色标

以下示例展示了如何根据连续的cmap创建一个离散的色标。我们使用matplotlib.colors.BoundaryNorm来描述区间边界(这些边界必须按递增顺序排列),并进一步向其传递_extend_参数以显示“超出”和“低于”颜色(用于超出归一化范围的数据)。

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")

img

带有任意颜色的色标

以下示例仍然使用BoundaryNorm来描述离散的区间边界,但现在使用matplotlib.colors.ListedColormap将每个区间与任意颜色关联起来(区间的数量必须与颜色的数量相等)。使用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',
)

img

带有自定义扩展长度的色标

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

img

Download Jupyter notebook: colorbar_only.ipynb

Download Python source code: colorbar_only.py

Download zipped: colorbar_only.zip

风险提示与免责声明
本文内容基于公开信息研究整理,不构成任何形式的投资建议。历史表现不应作为未来收益保证,市场存在不可预见的波动风险。投资者需结合自身财务状况及风险承受能力独立决策,并自行承担交易结果。作者及发布方不对任何依据本文操作导致的损失承担法律责任。市场有风险,投资须谨慎。


网站公告

今日签到

点亮在社区的每一天
去签到