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

如何使用NetworkX为图的边添加邻接矩阵数值标签?

给有向图边添加邻接矩阵数值标签的实现方法

要给图中边添加对应邻接矩阵的数值标签,需要修改Python代码,把权重值作为边属性传入图结构,再在导出dot文件时设置标签。具体操作如下:

  • 提取符合条件的边及其对应的权重值:不再只获取行和列索引,同时提取邻接矩阵中对应位置的数值。
  • 构建带权重属性的边列表:将权重作为字典属性添加到每条边中。
  • 导出dot文件时为边设置标签:遍历所有边,把权重值设为边的标签文本。

修改后的完整代码:

import numpy as np
import networkx as nx
from networkx.drawing.nx_pydot import to_pydot

# 定义邻接矩阵
adj = np.array([
    [  0,   0,   7,   0,   0,   0,   2,   1,   0,   0],
    [  0,   0,   5,  10,   8,  10,   4,  62,  13,   1],
    [  7,   5,   0,  17,  13,  90,   3,  10,   0,   1],
    [  0,  10,  17,   0,   2,  11, 218,  20,   0,   0],
    [  0,   8,  13,   2,   0,   2,   0,  30,   0,   0],
    [  0,  10,  90,  11,   2,   0,   4,  43,   9,   0],
    [  2,   4,   3, 218,   0,   4,   0,  11,   0,   0],
    [  1,  62,  10,  20,  30,  43,  11,   0,   2,   2],
    [  0,  13,   0,   0,   0,   9,   0,   2,   0,   1],
    [  0,   1,   1,   0,   0,   0,   0,   2,   1,   0]
])

count = 10
# 获取满足条件的行、列索引及对应权重
rows, cols = np.where(adj > count)
weights = adj[rows, cols]

# 构造带权重属性的边列表
edges = [(rows[i], cols[i], {'weight': weights[i]}) for i in range(len(rows))]

G = nx.DiGraph()
G.add_edges_from(edges)

# 转换为pydot并设置边标签
p = to_pydot(G)
for edge in p.get_edges():
    # 获取边的起点和终点(注意pydot返回的是字符串,需转整数)
    u = int(edge.get_source())
    v = int(edge.get_destination())
    # 从图中取出权重值并设置为边标签
    edge.set_label(str(G[u][v]['weight']))

p.write_dot('test.dot')

运行以上代码后,导出的test.dot文件中每条边都会带有对应的数值标签,再执行你原来的dot命令生成图片即可看到效果,比如5->7和7->5的边会分别标注邻接矩阵中对应的43和43。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 00:15:42