仅在 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。它可能不适用于更复杂的东西。