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

如何使用Python NetworkX展示两个Digraph的节点与边差异

Graphviz有向图差异比对实现方案

1. 核心实现步骤

  • 第一步:解析Dot文件提取结构化信息
    分别读取两个Digraph代码,按出现顺序提取三类信息:
    • 全局配置项:layout、ordering、rankdir等公共参数
    • 节点集合:按出现顺序存储每个节点的唯一ID、属性(填充色、标签、形状、样式)
    • 边集合:按出现顺序存储每条边的源节点ID、目标节点ID
  • 第二步:按顺序做差分对比
    严格遵循两个Dot文件原有的文本排列顺序做比对,避免打乱原有逻辑层级:
    • 全局配置:逐行比对,相同项保留原有样式,不同项标注修改点
    • 节点对比:先遍历第一个图的节点,对应查找第二个图的同ID节点,属性不同标注修改;第一个图存在第二个图不存在的标注为删除;第二个图独有的节点标注为新增
    • 边对比:逻辑同节点对比,按顺序比对边的源、目标节点,增删改分别标注
  • 第三步:生成带差异标记的可视化Dot代码
    给差异内容添加特殊样式:删除节点/边用红色填充/红色虚线,新增节点/边用绿色填充/绿色实线,修改节点/边用橙色填充/橙色实线,相同内容保留原有样式。

2. 示例差异对比Dot代码

digraph G {
layout=dot;
ordering=in;
rankdir=LR;
# 相同节点保留原有样式
"VOICE" [fillcolor=forestgreen, shape=box, style=filled];
"VOICE___VOICE" [fillcolor=yellow, label="VOICE", style=filled];
# 左侧图独有的match-all节点,标红表示删除
"VOICE___VOICE___match-all " [fillcolor=red, label="match-all (仅左图存在)", shape=diamond, style=filled];
"VOICE___VOICE___match-all ___match access-group ipv4 VOICE" [fillcolor=pink, label="match access-group ipv4 VOICE", shape=egg, style=filled];
"VOICE___VOICE___match-all ___match dscp cs3" [fillcolor=red, label="match dscp cs3 (仅左图存在)", shape=egg, style=filled];
"VOICE___VOICE___match-all ___end-class-map" [fillcolor=pink, label="end-class-map", shape=egg, style=filled];
# 右侧图独有的match-any节点,标绿表示新增
"VOICE___VOICE___match-any " [fillcolor=lightgreen, label="match-any (仅右图存在)", shape=diamond, style=filled];
"VOICE___VOICE___match-any ___match access-group ipv4 VOICE" [fillcolor=lightpink, label="match access-group ipv4 VOICE", shape=egg, style=filled];
"VOICE___VOICE___match-any ___match mpls experimental topmost 5" [fillcolor=lightgreen, label="match mpls experimental topmost 5 (仅右图存在)", shape=egg, style=filled];
"VOICE___VOICE___match-any ___end-class-map" [fillcolor=lightpink, label="end-class-map", shape=egg, style=filled];
# 左图边
"VOICE" -> "VOICE___VOICE";
"VOICE___VOICE" -> "VOICE___VOICE___match-all " [color=red, style=dashed, label="仅左图存在"];
"VOICE___VOICE___match-all " -> "VOICE___VOICE___match-all ___match access-group ipv4 VOICE" [color=red, style=dashed];
"VOICE___VOICE___match-all " -> "VOICE___VOICE___match-all ___match dscp cs3" [color=red, style=dashed];
"VOICE___VOICE___match-all " -> "VOICE___VOICE___match-all ___end-class-map" [color=red, style=dashed];
# 右图边
"VOICE___VOICE" -> "VOICE___VOICE___match-any " [color=green, label="仅右图存在"];
"VOICE___VOICE___match-any " -> "VOICE___VOICE___match-any ___match access-group ipv4 VOICE" [color=green];
"VOICE___VOICE___match-any " -> "VOICE___VOICE___match-any ___match mpls experimental topmost 5" [color=green];
"VOICE___VOICE___match-any " -> "VOICE___VOICE___match-any ___end-class-map" [color=green];
}

3. 效果说明

生成的可视化图会按原有文本顺序对齐展示,相同内容保留原有样式,删除内容标红、新增内容标绿、修改内容标橙,可直观看到两个图的节点、边差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:15:01