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

Python绘制带边权重的类别共现图:用边宽展示共现强度

解决方法:让网络图边宽对应共现强度

要实现边宽与共现强度/频率挂钩,核心是提取共现矩阵中的边权重,将其映射为绘图时的边宽度参数。以下是修改后的完整代码:

import pandas as pd
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt

# 初始化数据
data = [{'0': 1, '1': 0, '2': 1},
        {'0': 1, '1': 0, '2': 1},
        {'0': 1, '1': 1, '2': 0},
        {'0': 1, '1': 0, '2': 1},
        {'0': 1, '1': 1, '2': 0},
        {'0': 0, '1': 0, '2': 1},
        {'0': 1, '1': 0, '2': 1},
        {'0': 0, '1': 0, '2': 0},
        {'0': 1, '1': 1, '2': 1},
        {'0': 0, '1': 1, '2': 0},
        {'0': 1, '1': 0, '2': 1},
        {'0': 0, '1': 1, '2': 0},
        {'0': 1, '1': 0, '2': 0},
        {'0': 0, '1': 1, '2': 1}]

# 创建DataFrame
df = pd.DataFrame(data)

# 计算共现矩阵并清空对角线
df_asint = df.astype(int)
coocc = df_asint.T.dot(df_asint)
np.fill_diagonal(coocc.values, 0)

# 从共现矩阵构建图
G = nx.from_pandas_adjacency(coocc)

# 提取边权重并映射为边宽(系数可按需调整)
edge_weights = [G[u][v]['weight'] for u, v in G.edges()]
edge_widths = [w * 2 for w in edge_weights]  # 系数2用于放大宽度,提升可视化效果

# 绘图配置
plt.figure(figsize=(8, 6))
plt.axis('off')

# 绘制网络图,指定边宽参数
nx.draw_networkx(
    G,
    node_color=["cyan", "Red", "yellow"],
    node_size=1000,
    edge_color='gray',
    width=edge_widths,
    with_labels=True,
    font_size=12
)

plt.show()

关键修改说明:

  • 提取边权重:从构建的图G中直接获取每条边的weight属性,该属性对应共现矩阵中的共现次数。
  • 映射边宽:将原始权重乘以一个系数(示例中为2),把数值转换为适合可视化的宽度,避免边过细或过粗。
  • 优化可视化细节:调整了节点大小、字体大小等参数,让图的可读性更强,同时保留了原有的节点颜色设置。

修改后,边的宽度会直观反映两个类别之间的共现频率——共现次数越多,边越粗。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 22:10:28