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

基于DataFrame使用NetworkX绘制节点边属性关联的加权图实现方法

基于NetworkX绘制指定规则加权图的实现方案

首先安装所需依赖:

pip install pandas networkx matplotlib

完整可运行代码

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

# 构造题目给出的DataFrame数据
df = pd.DataFrame({
    'id': ['id1', 'id2', 'id3', 'id4'],
    'source': ['A', 'A', 'A', 'A'],
    'Target': ['B', 'C', 'D', 'E'],
    'Weight': [1, 2, 3, 4]
})

# 初始化无向图对象
G = nx.Graph()

# 批量添加带权重的边
for _, row in df.iterrows():
    G.add_edge(row['source'], row['Target'], weight=row['Weight'])

# 实现需求1:节点连接数越多尺寸越大
# 计算每个节点的度(即连接数)
node_degree = dict(G.degree())
# 将度值缩放为合适的节点尺寸,缩放系数可按需调整
node_size = [v * 1000 for v in node_degree.values()]

# 实现需求2:边权重越高线条越粗
# 提取所有边的权重,缩放为合适的线条宽度,缩放系数可按需调整
edge_width = [G[u][v]['weight'] * 2 for u, v in G.edges()]

# 选择弹簧布局让节点分布更合理,固定seed保证每次运行布局一致
pos = nx.spring_layout(G, seed=42)

# 依次绘制节点、节点标签、边、边权重标签
nx.draw_networkx_nodes(G, pos, node_size=node_size, node_color='lightblue')
nx.draw_networkx_labels(G, pos, font_size=12)
nx.draw_networkx_edges(G, pos, width=edge_width, edge_color='gray')
edge_labels = nx.get_edge_attributes(G, 'weight')
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels)

# 隐藏坐标轴
plt.axis('off')
plt.show()

效果说明

  • 节点A的连接数为4,是所有节点中最高的,因此节点尺寸远大于仅1个连接的B、C、D、E节点
  • 边权重从A-E(权重4)到A-B(权重1)依次降低,对应边的线条也从粗到细变化
  • 代码中的节点尺寸缩放系数1000、边宽度缩放系数2都可以根据实际画布大小和展示需求调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:27:01