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

基于Python的Networkx MultiDiGraph流程类可视化方案问询

NetworkX MultiDiGraph 类UML活动图可视化方案

核心方案

用NetworkX结合Matplotlib实现,通过固定布局种子保证可视化一致性,自定义节点样式模拟UML活动图,处理多重边与回环,无需精准对齐但满足对比分析需求。

实现代码

import networkx as nx
import matplotlib.pyplot as plt

# 替换为你的MultiDiGraph节点/边数据
G = nx.MultiDiGraph()
G.add_nodes_from(["活动A", "活动B", "活动C", "活动D"])
G.add_edges_from([
    ("活动A", "活动B"),
    ("活动A", "活动C"),
    ("活动B", "活动C"),
    ("活动C", "活动B"),  # 回环边
    ("活动C", "活动D"),
    ("活动B", "活动D"),  # 多重边
])

# 固定布局:优先用dot布局(层次化,符合活动图流程方向),需依赖Graphviz
# 安装依赖:系统层面装Graphviz + pip install pygraphviz
pos = nx.nx_agraph.graphviz_layout(G, prog='dot', args='-Grankdir=LR', seed=42)

# 无Graphviz时,改用spring_layout并固定seed,保证布局一致
# pos = nx.spring_layout(G, seed=42, k=0.8)

# 绘制节点:方形+白填充黑边框,模拟UML活动节点样式
nx.draw_networkx_nodes(
    G, pos,
    node_shape='s', node_size=3500,
    node_color='white', edgecolors='black', linewidths=2
)

# 绘制边:用弧度区分多重边,回环自动适配显示
nx.draw_networkx_edges(
    G, pos,
    connectionstyle="arc3,rad=0.15",
    arrowsize=20, edge_color='black'
)

# 添加节点标签
nx.draw_networkx_labels(G, pos, font_size=12, font_weight='bold')

# 可选:添加边标签(若需展示边属性)
# edge_labels = {(u, v, k): f"边{k+1}" for u, v, k in G.edges(keys=True)}
# nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels, font_size=10)

# 优化显示
plt.axis('off')
plt.tight_layout()

# 保存或展示
plt.savefig("流程对比图.png", dpi=150, bbox_inches='tight')
plt.show()

关键细节说明

  • 布局一致性:所有布局算法指定seed参数,确保每次运行生成完全相同的节点位置,满足不同流程版本的对比需求。
  • UML活动图样式:用方形节点(node_shape='s')、白色填充黑色边框,匹配活动图中"活动"元素的视觉特征。
  • 多重边与回环处理:通过connectionstyle设置边的弧度,避免多重边重叠;回环边会自动绘制在节点周围,无需额外配置。
  • 无Graphviz替代方案:若无法安装Graphviz,改用spring_layout并固定seed,虽为力导向布局,但一致性不受影响,仍可用于对比。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 16:25:19