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

如何将多数据源组合与共同数据点数据绘制成热力图?

将数据源组合DataFrame转换为热力图的方法

1. 数据转换思路

你的DataFrame每一行代表一个数据源子集(True表示包含该数据源)和对应的共同数据点数量。要生成热力图,核心是把这些子集的count映射到一个数据源两两关系矩阵——行和列均为数据源名称,矩阵值表示两个数据源共同参与的组合的总数据点数量(也可包含单个数据源的总参与量)。

2. 具体代码实现

步骤1:提取每行的数据源子集

先把每行中True对应的数据源名称提取出来,生成子集列表:

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

# 加载你的数据
data = { 's1': [True, False, False], 's2': [True, True, True], 's3': [False, False, True], 's4': [False, True, False], 'count': [2, 2, 2] }
df = pd.DataFrame(data)

# 提取每行的数据源子集
df['sources'] = df.apply(lambda row: row.index[row == True].tolist(), axis=1)

步骤2:构建两两关系矩阵

初始化对称矩阵,遍历每个子集,将count累加到所有两两组合的位置(包含自身,用于展示单个数据源的总数据点数量):

# 获取所有数据源名称
sources = df.filter(like='s').columns.tolist()
# 初始化零矩阵
heatmap_data = pd.DataFrame(0, index=sources, columns=sources)

# 遍历每行数据,更新矩阵
for idx, row in df.iterrows():
    subset = row['sources']
    cnt = row['count']
    # 遍历子集内的所有两两组合
    for i in subset:
        for j in subset:
            heatmap_data.loc[i, j] += cnt

转换后的矩阵结果:

s1s2s3s4
s12200
s22622
s30220
s40202

步骤3:绘制热力图

用seaborn绘制热力图,添加标注提升可读性:

plt.figure(figsize=(8,6))
sns.heatmap(heatmap_data, annot=True, cmap='Blues', fmt='d')
plt.title('数据源组合数据点热力图')
plt.xlabel('数据源')
plt.ylabel('数据源')
plt.show()

3. 扩展调整

  • 如果仅需展示不同数据源间的交集,可在循环中跳过自身组合:
    for i in subset:
        for j in subset:
            if i != j:
                heatmap_data.loc[i, j] += cnt
    
  • 若数据源数量较多,可调整热力图尺寸、颜色映射(如cmap='viridis'),或关闭部分标注来优化可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 13:26:26