You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib imshow如何为特定数值绑定对应的映射颜色?

固定0/1数值到指定颜色的实现方法

你之前的方案存在映射不稳定的核心原因是imshow默认会对输入矩阵的数值做自动归一化处理,将矩阵的最小值映射到色卡的第一个颜色,最大值映射到色卡的最后一个颜色,因此没有绑定固定的数值-颜色对应关系。可以通过以下两种简便方法实现需求:

方法1:添加vmin/vmax参数固定映射区间

适合仅需要映射连续整数数值的场景,直接在imshow调用时指定归一化的上下限即可:

import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap

# 颜色列表顺序对应数值从小到大的映射:数值0→grey,数值1→blue
custom_cmap = ListedColormap(['grey', 'blue'])
# vmin=0固定色卡起始值对应数值0,vmax=1固定色卡终止值对应数值1
plt.imshow([[1,0],[0,1]], cmap=custom_cmap, vmin=0, vmax=1)
plt.show()

方法2:使用BoundaryNorm明确边界映射

适合数值不连续、需要严格控制数值边界对应关系的场景,稳定性更高:

import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap, BoundaryNorm

custom_cmap = ListedColormap(['grey', 'blue'])
# 定义边界:小于0.5的数值映射第一个颜色,0.5~1.5之间的数值映射第二个颜色
# 刚好可以精准匹配整数0和1的映射需求,不会出现数值偏移问题
custom_norm = BoundaryNorm([-0.5, 0.5, 1.5], custom_cmap.N)
plt.imshow([[1,0],[0,1]], cmap=custom_cmap, norm=custom_norm)
plt.show()

如果需要扩展更多数值的映射,只需要对应扩充颜色列表、调整vmin/vmax范围或BoundaryNorm的边界列表即可。

内容的提问来源于stack exchange,提问作者lorenzori

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 06:12:02