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

如何用ggplot绘制以数值总和替代相关性的关联热力图?

实现法案主题重叠计数的热力图

核心思路是先构建主题共现矩阵(每个单元格对应同时属于两个主题的法案数量),再用热力图可视化这个矩阵,完全不需要依赖相关性计算。以下是具体实现步骤(以Python为例):

1. 数据预处理:构建共现矩阵

假设你的数据集是宽格式:每行1条法案,每列1个主题,值为1(法案属于该主题)或0(不属于)。我们可以直接用矩阵乘法计算共现矩阵:

import pandas as pd

# 模拟你的数据集:5条法案,3个主题
data = pd.DataFrame({
    "主题A": [1,1,0,0,1],
    "主题B": [1,0,1,1,0],
    "主题C": [0,1,1,0,0]
})

# 计算共现矩阵:矩阵转置 × 原矩阵,得到每个主题对的重叠法案数
cooccur_matrix = data.T @ data
  • 对角线值:对应单个主题的总法案数(比如主题A的对角线值是3,代表有3条法案属于主题A)
  • 非对角线值:对应同时属于两个主题的法案数(比如主题A和主题B的交叉值是1,代表有1条法案同时属于A和B)

如果需要区分「仅属于单个主题」和「重叠主题」,可以调整矩阵:

import numpy as np
# 计算仅属于单个主题的法案数
only_single = data.sum(axis=0) - data[data.sum(axis=1)>=2].sum(axis=0)
cooccur_matrix_only = cooccur_matrix.copy()
np.fill_diagonal(cooccur_matrix_only.values, only_single.values)

2. 绘制自定义热力图

用seaborn.heatmap直接传入共现矩阵即可,完全不需要计算相关性:

import seaborn as sns
import matplotlib.pyplot as plt

plt.figure(figsize=(8,6))
# 绘制热力图,annot=True显示单元格数值,fmt="d"确保显示整数
sns.heatmap(cooccur_matrix, annot=True, fmt="d", cmap="Blues", cbar=True,
            xticklabels=data.columns, yticklabels=data.columns)
plt.title("法案主题重叠计数热力图")
plt.show()
  • cmap:可以根据需求替换成Greens、Reds等配色
  • 如果不需要显示对角线区域,可以用mask参数隐藏:
    mask = np.triu(np.ones_like(cooccur_matrix, dtype=bool))
    sns.heatmap(cooccur_matrix, annot=True, fmt="d", cmap="Blues", mask=mask)
    

适配长格式数据集

如果你的原始数据是长格式(每行是法案+主题的对应关系),可以先转成宽格式再计算共现矩阵:

# 长格式转宽格式示例
long_data = pd.DataFrame({
    "法案ID": [1,1,2,2,3,4,5],
    "主题": ["主题A","主题B","主题A","主题C","主题B","主题B","主题A"]
})
wide_data = pd.crosstab(long_data["法案ID"], long_data["主题"])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:50:35