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

如何为Plotly imshow热力图按自定义数值区间设置颜色

自定义热力图区间颜色的解决方法

要实现为指定数值区间(如x至x+0.05)设置特定颜色,核心是用BoundaryNorm绑定区间边界,配合ListedColormap定义对应颜色,以下是具体步骤和示例代码:

步骤说明

  • 明确所有需要划分的数值区间,按0.05步长生成边界列表
  • 为每个区间分配对应颜色,创建自定义色图ListedColormap
  • 用BoundaryNorm将区间边界与色图绑定,确保每个区间匹配指定颜色
  • 绘制热力图时传入自定义的cmap和norm参数

修改后的示例代码

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

# 生成示例数据
data = np.random.rand(10, 10) * 0.5  # 数据范围0-0.5

# 定义区间边界(步长0.05)
min_val = data.min()
max_val = data.max()
boundaries = np.arange(min_val, max_val + 0.05, 0.05)

# 为每个区间定义颜色(示例用不同深浅的红、绿、蓝,可自行调整)
colors = [
    '#FFEEEE', '#FFCCCC', '#FFAAAA', '#FF8888', '#FF6666',
    '#EEFFEE', '#CCFFCC', '#AAFFAA', '#88FF88', '#66FF66',
    '#EEEEFF', '#CCCCFF', '#AAAAFF', '#8888FF', '#6666FF'
]
# 确保颜色数量 = 区间数量(边界数-1)
cmap = ListedColormap(colors[:len(boundaries)-1])
norm = BoundaryNorm(boundaries, cmap.N)

# 绘制热力图
fig, ax = plt.subplots()
im = ax.imshow(data, cmap=cmap, norm=norm)

# 添加颜色条,显示区间
cbar = fig.colorbar(im, ticks=boundaries)
cbar.set_label('数值区间')

plt.show()

关键细节

  • 边界列表必须包含所有区间的起止点,最后一个边界要大于等于数据最大值
  • 颜色列表的长度必须等于区间数量(边界数减1),否则会报错
  • 如果需要固定区间(而非基于数据自动生成),直接手动定义boundaries即可,比如boundaries = [0, 0.05, 0.1, 0.15, ..., 1.0]

参考资料

  • matplotlib官方文档中BoundaryNorm类的说明:用于将连续数值映射到离散区间的颜色
  • matplotlib官方文档中ListedColormap类的说明:用于创建基于离散颜色列表的色图
  • matplotlib热力图(imshow)的参数说明:重点关注cmap和norm参数的用法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:31:18