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

如何为Seaborn热力图按数值区间设置指定颜色(含负值)?

实现Seaborn热图的分段颜色映射

直接用matplotlib的颜色工具类就能实现你要的分段配色需求,具体代码如下:

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

# 假设你的矩阵p已定义,这里生成示例矩阵方便测试
p = np.array([[-2, 0.5, 1.2], [0.8, -1.5, 2], [0.3, 0.9, 1.5]])

plt.figure(figsize=(16,16))

# 1. 定义对应区间的颜色和边界
colors = ["blue", "gray", "pink"]  # 蓝色(负值)、灰色(0-0.99)、粉色(>1)
# 边界划分:小于0,0到1,大于1
bounds = [-np.inf, 0, 1, np.inf]

# 2. 创建分段颜色映射和归一化规则
cmap = ListedColormap(colors)
norm = BoundaryNorm(bounds, cmap.N)

# 3. 绘制热图,传入自定义配色规则
sns.heatmap(p, annot=True, square=True, cmap=cmap, norm=norm)
plt.show()

关键说明:

  • BoundaryNorm:负责把数值按你设定的边界分到对应区间,这里的bounds将数值划分为(-∞, 0)、[0,1)、[1, ∞)三个区间,刚好匹配你的配色需求。
  • ListedColormap:把你指定的颜色列表转换成Seaborn能识别的颜色映射格式,也可以用十六进制色值来精准调整色调,比如蓝色用#1f77b4、粉色用#ff99cc。
  • 如果需要调整边界逻辑(比如让等于1的数值归到灰色区间),只需把bounds改成[-np.inf, 0, 1.0, np.inf]即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:40:34