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

matplotlib cm.jet函数传入整数/浮点数返回颜色异常问题

Why does cm.jet(1) return a color similar to cm.jet(0) in matplotlib 2.1.2 (Python 3.5)?

你碰到的这个问题其实是matplotlib 2.1.2版本里一个关键的行为差异:颜色映射函数对整数输入和浮点数输入的处理逻辑完全不同,具体原因如下:

核心差异:整数 vs 浮点数输入的处理逻辑

  • 当传入浮点数(比如0.0、0.25、1.0)时,cm.jet()会把这个值当作0到1之间的归一化比例,直接映射到jet色图的完整渐变范围。比如1.0对应色图的最后一个颜色(也就是你看到的红色系(0.5, 0.0, 0.0, 1.0)),0.0对应色图的起始深蓝色(0.0, 0.0, 0.5, 1.0)。
  • 但当传入整数(比如0、1)时,matplotlib 2.1.2会把这个整数当成色图内部预定义颜色列表的索引值。jet色图在这个版本里的颜色列表长度是256,所以:
    • cm.jet(0)取的是列表第1个元素(深蓝色)
    • cm.jet(1)取的是列表第2个元素,这个元素和第1个元素的颜色差异极小(都是深蓝色系,只是蓝色通道值略高一点),所以看起来和cm.jet(0)几乎一致。

结合你的输出验证

从你提供的测试结果就能明显看到这个区别:

cm.jet(1.0)返回正确的末尾色:(0.5, 0.0, 0.0, 1.0)
cm.jet(1)返回的是索引1的色值:(0.0, 0.0, 0.517825311942959, 1.0),和cm.jet(0)的(0.0, 0.0, 0.5, 1.0)高度接近。

解决办法

  1. 统一传入浮点数:把整数参数转换成浮点数,比如用cm.jet(1.0)代替cm.jet(1);
  2. 归一化整数输入:如果你的数据是整数范围(比如0到N),先将其归一化到0-1的浮点数区间,比如value / N后再传入色图函数;
  3. 升级matplotlib版本:这个行为在matplotlib 3.x及以上版本里被统一了——不管输入是整数还是浮点数,只要在0-1范围内,都会按比例映射,不会再把整数当作索引处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:21:51