You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在seaborn.heatmap中设置自定义颜色映射:0对应白,正负分色

实现Seaborn热图0值为白色、正相关红色、负相关蓝色的设置

当然可以实现这个需求!其实只需要调整Seaborn热图的几个参数,或者自定义颜色映射就能搞定。先看看你当前生成的热图:

correlation matrix

你遇到的问题是默认的颜色映射中心没有对齐到0,导致0值没有对应白色。下面给你两种可行的解决方案:

方案1:利用现有colormap,设置中心对齐0

你用的RdBu_r本身就是蓝-白-红的渐变colormap,只需要加上center=0参数,就能让0值对应白色,同时正相关显示红色系,负相关显示蓝色系。如果想让颜色映射完全匹配相关系数的范围([-1,1]),还可以指定vminvmax来让颜色渐变更对称:

corr = train.corr()
sns.heatmap(corr, cmap="RdBu_r", center=0, vmin=-1, vmax=1)
  • center=0:将颜色映射的中点对齐到0,确保0值对应colormap的中间色(白色)
  • vmin=-1vmax=1:强制颜色范围覆盖相关系数的完整区间,让正/负相关的颜色对比更直观

如果你的数据中相关系数没有完全达到-1或1,也可以省略vminvmaxcenter=0依然能保证0值显示为白色。

方案2:自定义颜色映射(更灵活)

如果你想更精准地控制颜色的深浅或色调,可以自定义一个从蓝色到白色再到红色的渐变colormap:

from matplotlib.colors import LinearSegmentedColormap
import seaborn as sns
import matplotlib.pyplot as plt

# 自定义颜色序列:深蓝色 -> 白色 -> 深红色
color_list = ["#0033CC", "#FFFFFF", "#CC0033"]
custom_cmap = LinearSegmentedColormap.from_list("blue_white_red", color_list)

corr = train.corr()
sns.heatmap(corr, cmap=custom_cmap, center=0)
plt.show()

这种方法可以根据你的喜好调整颜色的RGB值,打造更符合需求的视觉效果。

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

火山引擎 最新活动