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

如何用Seaborn创建col1-col5与col6-col10对比的热力图

实现DataFrame分组对比热力图的方法

问题背景

我有如下DataFrame:

col1    col2    col3    col4    col5   col6    col7     col8     col9      col10

2       12      8        3      16      9       5        13       11        14
3       14      7        9      18      12      14       14       13        13
5       15      10       5      8       10      18       9         8         5

我希望生成一个热力图,实现col1-col5与col6-col10的对比,结构如下:

col1

col2

col3

col4

col5

       col6    col7  col8  col9    col10

实现方案

要实现这种分组对比的热力图,核心是把数据重塑为纵轴对应col1-col5、横轴对应col6-col10的交叉匹配结构,再用热力图工具可视化。以下是具体步骤:

1. 数据拆分与重塑

先将原DataFrame拆分为左右两组,再通过行索引匹配,生成交叉组合的数据集:

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

# 构造原DataFrame
data = {
    'col1': [2,3,5],
    'col2': [12,14,15],
    'col3': [8,7,10],
    'col4': [3,9,5],
    'col5': [16,18,8],
    'col6': [9,12,10],
    'col7': [5,14,18],
    'col8': [13,14,9],
    'col9': [11,13,8],
    'col10': [14,13,5]
}
df = pd.DataFrame(data)

# 拆分左右列组
left_group = ['col1','col2','col3','col4','col5']
right_group = ['col6','col7','col8','col9','col10']

# 转为长格式并保留行索引,用于匹配
left_long = df[left_group].stack().reset_index()
left_long.columns = ['row_id', 'left_col', 'val']

right_long = df[right_group].stack().reset_index()
right_long.columns = ['row_id', 'right_col', 'val']

# 合并得到所有交叉组合,再转换为热力图需要的宽格式
merged = pd.merge(left_long, right_long, on='row_id')
heatmap_df = merged.pivot_table(index='left_col', columns='right_col', values='val_x', aggfunc='first')

注:val_x对应左组数值,若要对比差值,可新增merged['diff'] = merged['val_x'] - merged['val_y'],再用diff列生成热力图。

2. 绘制目标结构热力图

用Seaborn绘制热力图,调整轴标签布局适配需求:

plt.figure(figsize=(10,8))
ax = sns.heatmap(heatmap_df, annot=True, cmap='coolwarm', fmt='g')

# 设置轴标签显示方式:左侧垂直、顶部倾斜
ax.set_yticklabels(ax.get_yticklabels(), rotation=0)
ax.set_xticklabels(ax.get_xticklabels(), rotation=45)

plt.title('col1-col5 与 col6-col10 热力对比')
plt.tight_layout()
plt.show()

生成的热力图会以纵轴展示col1-col5、横轴展示col6-col10,每个单元格对应原DataFrame中每行的左右组数值匹配,完全符合你需要的结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:31:03