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

使用seaborn/matplotlib绘制按行类别着色的分类值热图

实现方案

选用图表类型

直接用seaborn.heatmap即可实现需求,核心逻辑是将原始0/1观测值和行分类属性做绑定映射,再通过自定义色盘实现分类颜色区分。

实现步骤

1. 导入依赖库

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

2. 构造示例数据(使用自己的真实数据可跳过这步)

df = pd.DataFrame({
    'ID': [1,2,3,4],
    'Cat': ['A','B','A','C'],
    'V1': [1,1,1,0],
    'V2': [1,1,1,0],
    'V3': [1,1,0,0]
})

3. 生成绘图用的转换矩阵

将不同Cat分类的1值映射为不同的数值,0值保持不变,方便后续绑定颜色:

# 分类到数值的映射关系,可根据自己的分类调整
cat_map = {'A': 1, 'B': 2, 'C': 3}
# 每行V列的0/1值 乘以 对应行的分类映射值,0乘任何数还是0,1会变成对应分类的数值
plot_matrix = df[['V1', 'V2', 'V3']].mul(df['Cat'].map(cat_map), axis=0)

4. 自定义颜色映射并绘图

# 自定义色盘:索引0对应未观测的0值(浅灰色),索引1对应A类红色,索引2对应B类绿色,索引3对应C类蓝色
custom_cmap = ['#f0f0f0', '#ff4444', '#00C851', '#33b5e5']

plt.figure(figsize=(6, 4))
# 绘制热图,关闭色条、单元格数值显示,加白色边框分割单元格
sns.heatmap(
    plot_matrix,
    cmap=custom_cmap,
    cbar=False,
    annot=False,
    linewidths=1,
    linecolor='white'
)
# 自定义y轴标签,显示每行的ID和Cat信息,可根据需求调整
plt.yticks(ticks=[i+0.5 for i in range(len(df))],
           labels=[f'ID:{row.ID} Cat:{row.Cat}' for _, row in df.iterrows()],
           rotation=0)
plt.xlabel('观测指标')
plt.ylabel('样本')
plt.title('指标观测情况')
plt.show()

效果说明

  • 值为0的单元格显示浅灰色,代表未观测
  • 值为1的单元格会根据所在行的Cat分类显示对应颜色,完全符合需求
  • 如果需要调整颜色,直接修改custom_cmap里的色值即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:54:06