如何防止graphviz中的边缘相互重叠

时间:2010-10-19 10:56:34

标签: graph-theory graphviz overlap

我有一个我在graphviz中创建的图形,但问题是边缘相互重叠(每行有5-7个节点),因此很难说每个节点是它连接的节点

如何使边缘不相互重叠?让他们彼此交叉是可以的。

3 个答案:

答案 0 :(得分:31)

我假设你有一个用点布局的有向图。

我认为没有神奇的开关来防止重叠边缘。 Graphviz尝试开箱即用。

根据图表,一些建议可能会有所帮助:

  • 边缘集中器(集中度=真):将具有公共端点的多个边合并为单个边,并使部分平行边共享其路径的一部分。
  • 端口:边缘可以在特定端口(n,ne,e,se,s,sw,w,nw,w,c,_)上具有其原点和端点。根据边缘端口,边缘会改变其形状(样条曲线)。
  • 不可见节点:可能会出现将不可见节点引入路由边缘的情况。

答案 1 :(得分:14)

另一种方法是向图形添加重叠属性。允许的属性是scale(会大大增加输出的大小)或false(这不会增加大小,但可能会导致边缘重叠节点)。

overlap = scale;

如果您使用overlap = false,则可以通过添加属性splines=true:来删除与节点的边缘重叠

overlap = false;
splines = true;

这将大大减慢大型图形的生成时间。

答案 2 :(得分:8)

即使对于非常简单的图表,我也会看到graphvizneatofdp)来生成重叠。例如:

graph G {
0;
1;
2;
3;
0--1 ;
1--2 ;
2--3 ;
3--0 ;
}

在我的代码2.38.0版本中生成一个十字。从documentation他们建议尝试使用不同的随机种子。例如,这对我有用:

neato -Gstart=5 file.dot -Tps -o file.ps