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

Python中如何表示边权数组形式的图数据并完成可视化

带权有向图可视化实现方案

你可以直接用networkx搭配matplotlib实现需求,这套方案完全适配你给出的数组存储格式,替换A、B数组即可通用到其他同结构的图数据。

数据格式对应规则

  • 数组A:形状为(边总数, 2),每行元素[i,j]对应一条从节点i指向节点j的有向边
  • 数组B:形状为(边总数, 1),每行数值对应A数组同位置边的关联取值(权重)

测试用例数据

你提供的测试数据代码如下:

import numpy as np

A=np.array([[0, 1],
            [0, 3],
            [1, 2],
            [1, 4],
            [2, 5],
            [3, 4],
            [4, 5]])

B=np.array([[1],
       [2],
       [3],
       [4],
       [5],
       [6],
       [7]])

可直接运行的实现代码

import networkx as nx
import matplotlib.pyplot as plt

# 初始化有向图实例
G = nx.DiGraph()

# 逐行读取边和对应权重,加入图结构
for (start_node, end_node), weight in zip(A, B.flatten()):
    G.add_edge(start_node, end_node, weight=weight)

# 配置分层布局,匹配参考图的节点排列逻辑:按拓扑排序结果分层对齐
for layer_idx, node_group in enumerate(nx.topological_generations(G)):
    for node in node_group:
        G.nodes[node]["layer"] = layer_idx
node_pos = nx.multipartite_layout(G, subset_key="layer")

# 按样式绘制各元素
plt.figure(figsize=(8, 6))
# 绘制节点:浅蓝色填充、黑色边框
nx.draw_networkx_nodes(G, node_pos, node_size=500, node_color="#add8e6", edgecolors="black")
# 绘制带箭头的有向边
nx.draw_networkx_edges(G, node_pos, arrowstyle="->", arrowsize=20, width=2, edge_color="dimgray")
# 绘制节点编号标签
nx.draw_networkx_labels(G, node_pos, font_size=12, font_weight="bold")
# 绘制边上的权重标签
edge_label_map = {(u, v): data["weight"] for u, v, data in G.edges(data=True)}
nx.draw_networkx_edge_labels(G, node_pos, edge_labels=edge_label_map, font_size=12)

# 关闭坐标轴,调整布局
plt.axis("off")
plt.tight_layout()
plt.show()

输出效果

运行代码后生成的可视化结果和你给出的预期效果完全一致:
带权有向图可视化输出

通用调整提示:后续更换同格式的A、B数组时无需修改核心绘图逻辑;如果需要调整节点大小、颜色、边粗细、字体大小等样式,直接修改对应绘图函数的参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:51:19