文中内容仅限技术学习与代码实践参考,市场存在不确定性,技术分析需谨慎验证,不构成任何投资建议。
自定义色标教程
本教程展示了如何构建和自定义独立的色标,即没有附加的绘图。
colorbar
需要一个“可映射”(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')
附加在现有轴旁边的色标
本教程中的所有示例(除了这一部分)都显示了独立的色标,但也可以通过在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')
基于连续颜色映射的离散和扩展色标
以下示例展示了如何根据连续的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")
带有任意颜色的色标
以下示例仍然使用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',
)
带有自定义扩展长度的色标
我们可以在具有离散区间的色标上自定义色标扩展的长度。为了使每个扩展的长度与内部颜色的长度相同,使用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()
Download Jupyter notebook: colorbar_only.ipynb
Download Python source code: colorbar_only.py
Download zipped: colorbar_only.zip
风险提示与免责声明
本文内容基于公开信息研究整理,不构成任何形式的投资建议。历史表现不应作为未来收益保证,市场存在不可预见的波动风险。投资者需结合自身财务状况及风险承受能力独立决策,并自行承担交易结果。作者及发布方不对任何依据本文操作导致的损失承担法律责任。市场有风险,投资须谨慎。