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

如何绘制特征存在/缺失组合的可视化图表?

实现方案

你需要的效果可以直接用seaborn的二元热图实现,只需要先调整行列顺序匹配你的预期布局即可,完整可运行代码如下:


步骤1:调整数据集行列顺序

先把特征列按出现频次从高到低排序,样本行按拥有特征的数量从少到多排序,和你给出的预期结构完全匹配:

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

# 原始数据集
f_list = ['feature_5','feature_3','feature_1','feature_4','feature_2','feature_6']
v = [[0,0,0,1,1,1],[0,1,1,1,1,1],[0,0,0,0,1,1],[0,0,1,1,1,1],[0,0,0,0,0,1],[1,1,1,1,1,1]]
df = pd.DataFrame(data=v, columns=f_list, index=range(6))

# 列按特征总出现频次降序排序
col_sort = df.sum().sort_values(ascending=False).index
df_sorted_col = df[col_sort]

# 行按样本拥有的特征总数升序排序
df_sorted = df_sorted_col.loc[df_sorted_col.sum(axis=1).sort_values().index]

步骤2:绘制特征存在/缺失热图

plt.figure(figsize=(10, 6))
ax = sns.heatmap(df_sorted,
                 cmap=['#FFFFFF', '#4472C4'], # 0对应白色(缺失)、1对应蓝色(存在)
                 cbar=False, # 隐藏右侧颜色条
                 linewidths=0.5, # 显示格子边框
                 linecolor='lightgray',
                 xticklabels=df_sorted.columns,
                 yticklabels=df_sorted.index,
                 annot=True, # 开启格子标注
                 fmt='s',
                 mask=df_sorted==0, # 缺失位置不显示标注
                 annot_kws={'fontsize':14})

# 将存在位置的默认标注"1"替换为你需要的"x"
for text in ax.texts:
    if text.get_text() == '1':
        text.set_text('x')

# 样式调整
ax.set_xlabel('特征')
ax.set_ylabel('样本编号')
plt.yticks(rotation=0)
plt.show()

效果说明

  • 蓝色带x的方格表示特征存在,白色空格表示特征缺失
  • 列顺序、行顺序和你给出的预期效果完全一致
  • 不需要x标记的话删掉annot相关的所有配置即可,只靠色块区分更清爽

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:09:01