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

如何利用同维度数据集为已有DataFrame热力图设置配色映射?

问题与解决方案

问题描述

现有数值范围0-15的矩阵形式DataFrame(df),已通过seaborn.heatmap绘制热力图。同时导入同维度的第二个数据集num,希望用num的数值控制热力图的配色映射,但尝试使用annot参数后出现图像失真,需正确实现该需求。

用户提供的示例代码:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 导入主数据
df = pd.read_csv('/Linux/Case_study/IncandMass.csv', delimiter=",", header=None, skiprows=1)  
df.info()

输出的df结构信息:

0         1         2     ...      1436      1437      1438
174  0.000000  0.000000  0.000000  ...  0.000000  0.000000  0.000000
173  0.000000  0.000000  0.000000  ...  0.000000  0.000000  0.000000
172  0.000000  0.000000  0.000000  ...  0.000000  0.000000  0.000000
171  0.000000  0.000000  0.000000  ...  0.000000  0.000000  0.000000
170  0.000000  0.000000  0.000000  ...  0.000000  0.000000  0.000000
..        ...       ...       ...  ...       ...       ...       ...
9    0.037891  0.051185  0.026712  ...  0.042928  0.055719  0.051363
8    0.000000  0.000000  0.000000  ...  0.000000  0.000000  0.000000
7    0.000000  0.000000  0.000000  ...  0.000000  0.000000  0.000000
6    0.000000  0.000000  0.000000  ...  0.000000  0.000000  0.000000
5    0.000000  0.000000  0.000000  ...  0.000000  0.000000  0.000000

[170 rows x 1439 columns]

原热力图绘制代码:

# 绘制热力图
fig, ax = plt.subplots(figsize=(12, 7))
sns.heatmap(df, cmap="jet", linewidths=0.0)

已导入同维度的配色控制数据集:

num = pd.read_csv('/Linux/Case_study/Incandnum.csv', delimiter=",", header=None, skiprows=1)

解决方法

你混淆了annot参数的作用——它是用来在单元格上标注文本内容的,并非控制配色映射的参数。要实现用num控制配色,需直接将num传给seaborn.heatmap的data参数;若需要显示df的数值作为标注,再将df传给annot参数,并通过fmt控制标注格式避免失真。

完整实现代码

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 导入数据
df = pd.read_csv('/Linux/Case_study/IncandMass.csv', delimiter=",", header=None, skiprows=1)
num = pd.read_csv('/Linux/Case_study/Incandnum.csv', delimiter=",", header=None, skiprows=1)

# 绘制热力图:用num控制配色,df作为单元格标注
fig, ax = plt.subplots(figsize=(12, 7))
# data参数传入num,控制颜色映射;annot传入df,显示原数据
# fmt='.2f'设置标注保留两位小数,避免文本重叠;cbar=True显示颜色条
sns.heatmap(num, cmap="jet", linewidths=0.0, annot=df, fmt='.2f', cbar=True)

plt.tight_layout()
plt.show()

关键参数说明

  • data=num:指定热力图的颜色映射依据num的数值,这是实现需求的核心。
  • annot=df:仅当需要在单元格中显示原df的数值时设置此参数;若不需要标注,直接删除annot相关配置即可。
  • fmt='.2f':控制标注的格式,避免因数值位数过多导致文本重叠、图像失真。若df为整数类型,可改用fmt='d'。

无标注简化版本

如果不需要在热力图中显示df的数值,代码可简化为:

fig, ax = plt.subplots(figsize=(12, 7))
sns.heatmap(num, cmap="jet", linewidths=0.0, cbar=True)
plt.tight_layout()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:25:25