如何为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
相关产品推荐
相关产品推荐

