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

matplotlib的gray、binary色图绘制二进制数组时0与1映射颠倒问题

问题原因说明

这一现象本质是Matplotlib的imshow函数默认的数值归一化逻辑导致的,和色图本身的定义无关:

  • 默认情况下imshow会自动取输入数组的最小值对应色条的最左端点,数组的最大值对应色条的最右端点,中间数值按线性规则做插值映射。

两类场景的具体解释

全1数组映射异常

当你输入全为1的np.uint8数组时,数组的最小值和最大值都是1,归一化后所有值都会映射到色图的最左端点:

  • gray色图的最左端为黑色,所以全1数组异常显示为全黑,不符合你预期的1对应白色
  • binary色图的最左端为白色,所以全1数组异常显示为全白,不符合你预期的1对应黑色

同时存在0和1的数组映射正常

当数组中同时存在0和1时,数组的最小值为0、最大值为1,归一化后刚好和你预期的映射规则匹配:

  • 0映射到色图最左端,1映射到色图最右端,所以两类色图的显示都符合预期。

修复方案

如果需要固定二进制数组的映射规则,不受数组内容的影响,调用imshow时手动指定vmin和vmax参数即可,示例如下:

# 固定gray色图0对应黑、1对应白
plt.imshow(uint8_arr, cmap='gray', vmin=0, vmax=1)
# 固定binary色图0对应白、1对应黑
plt.imshow(uint8_arr, cmap='binary', vmin=0, vmax=1)

如果你使用的是取值范围0-255的常规uint8灰度图,对应修改vmax=255即可固定映射规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:30:02