仅在 graphviz 中显示唯一边
Only show unique edges in graphviz
我有一个大约 5000 行的输入文件,每行有 1 到 9 个节点。
很多边都不是唯一的,我只想展示唯一的。
一个更简单的例子。
graph {
a -- b
a -- b
a -- b
}
产量
有没有办法让上面的图表产生类似
的结果
我知道我可以将示例输入更改为
graph {
a -- b
}
但是对于我的真实输入来说,做到这一点并不容易。
尝试 strict
:
strict graph {
a -- b
a -- b
a -- b
}
这会产生
并且应该适用于任何大小的图表。
其实有一个方法:使用strict
关键字:
strict graph G {
a -- b [label="First"];
a -- b [label="Second"];
a -- b [label="Third"];
}
结果:
如果没有 strict
,将显示所有三个边。请注意,它只采用第一条边的属性,这与文档所建议的相反。
如果您想获得一个干净的文件,其中不包含任何重复边,您可以使用图形处理工具gvpr
。
这是一个片段,它就是这样做的:
BEG_G { graph_t g = graph($G.name,"U") }
E {
node_t h = clone(g,$.head);
node_t t = clone(g,$.tail);
if(isEdge(t,h,"")==NULL){
edge_t e = clone(g,$);
}
}
END_G { $O = g; }
将其保存为类似 gvpr_rm_dupl_edges
和 运行 $ gvpr -f gvpr_rm_dupl_edges input.dot -o output.dot
的内容。 gvpr 预装了 graphviz。
如果是有向图,请将代码段开头的 "U"
更改为 "D"
我写这个片段是为了一个简单的图表,没有 sub-graphs。它可能不适用于更复杂的东西。
我有一个大约 5000 行的输入文件,每行有 1 到 9 个节点。
很多边都不是唯一的,我只想展示唯一的。
一个更简单的例子。
graph {
a -- b
a -- b
a -- b
}
产量
有没有办法让上面的图表产生类似
的结果我知道我可以将示例输入更改为
graph {
a -- b
}
但是对于我的真实输入来说,做到这一点并不容易。
尝试 strict
:
strict graph {
a -- b
a -- b
a -- b
}
这会产生
并且应该适用于任何大小的图表。
其实有一个方法:使用strict
关键字:
strict graph G {
a -- b [label="First"];
a -- b [label="Second"];
a -- b [label="Third"];
}
结果:
如果没有 strict
,将显示所有三个边。请注意,它只采用第一条边的属性,这与文档所建议的相反。
如果您想获得一个干净的文件,其中不包含任何重复边,您可以使用图形处理工具gvpr
。
这是一个片段,它就是这样做的:
BEG_G { graph_t g = graph($G.name,"U") }
E {
node_t h = clone(g,$.head);
node_t t = clone(g,$.tail);
if(isEdge(t,h,"")==NULL){
edge_t e = clone(g,$);
}
}
END_G { $O = g; }
将其保存为类似 gvpr_rm_dupl_edges
和 运行 $ gvpr -f gvpr_rm_dupl_edges input.dot -o output.dot
的内容。 gvpr 预装了 graphviz。
如果是有向图,请将代码段开头的 "U"
更改为 "D"
我写这个片段是为了一个简单的图表,没有 sub-graphs。它可能不适用于更复杂的东西。