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

Seaborn绘制百分比热力图如何固定色条范围为0-100%

seaborn百分比热力图固定0-100%颜色映射方案

问题原因

  • sns.heatmap()默认根据传入数据的实际最小值、最大值自动计算颜色映射区间,cbar_kws参数仅控制颜色条的刻度显示、文本格式,不会修改颜色映射的上下限,因此当数据最大值小于100时,会把当前数据的最大值映射到色条最顶端的深红色,出现颜色和百分比不匹配的问题。

修复方法

无需添加值为100的虚拟数据,调用sns.heatmap()时直接传入vmin=0、vmax=100两个参数,即可强制将颜色映射范围固定在0-100区间,保证百分比和颜色的对应关系始终准确。

修正后可运行代码

# 补全原代码缺失的依赖导入
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 数据构造逻辑保持不变
index_node_1 = ["Node 1", "Node 3", "Node 4", "Node 64"]
columns = ["main_node", "standard_node", "type_17", "type_45", "type_20 (A)", "type_20 (B)", "type_23 (A)", "type_23 (B)", "type_25 (A)", "type_25 (B)", "type_38 (A)", "type_38 (B)", "type_39 (A)", "type_39 (B)"]

df_hm_node_1 = pd.DataFrame(
{
columns[0]:[10, None, None, None],
columns[1]:[None, 20,  30, 50],
columns[2]: np.NAN,
columns[3]:[5,None,None,None],
columns[4]: np.NAN,
columns[5]: np.NAN,
columns[6]: np.NAN,
columns[7]: np.NAN,
columns[8]: np.NAN,
columns[9]: np.NAN,
columns[10]:np.NAN,
columns[11]:np.NAN,
columns[12]:np.NAN,
columns[13]:np.NAN
}, 
index = index_node_1)

# 绘制热力图
fig, ax = plt.subplots(figsize=(12,4))
hm_node_1 = sns.heatmap(
    df_hm_node_1,
    cmap='RdYlGn_r',
    linewidths=1,
    vmin=0,   # 固定颜色映射下限为0
    vmax=100, # 固定颜色映射上限为100
    cbar_kws={'format': '%.0f%%', 'ticks': [0, 25, 50, 75, 100]},
    fmt='g',
    annot=True
)
plt.title("Main node 1", fontsize=18)
plt.show()

参数说明

  • vmin:设置颜色映射对应的最小数值,所有小于等于该值的数据都会映射到色条最底端的颜色
  • vmax:设置颜色映射对应的最大数值,所有大于等于该值的数据都会映射到色条最顶端的颜色
  • 可根据需要在cbar_kws的ticks中添加中间刻度,让色条读值更直观

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 10:54:26