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

Dav*_*itz 51 graph-theory graphviz overlap

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

如何使边缘不相互重叠?让他们互相交叉是好的.

mar*_*pet 33

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

我不认为有一个神奇的开关来防止重叠边缘.Graphviz尝试开箱即用.

一些建议可能会有所帮助,具体取决于图表:

  • 边集中器(集中器=真):将具有公共端点的多个边合并为单个边,并且具有部分平行边共享其路径的一部分.
  • ports:边缘可以在特定端口(n,ne,e,se,s,sw,w,nw,w,c,_)上有它们的原点和端点.根据边缘端口,边缘会改变其形状(样条曲线).
  • 不可见节点:在某些情况下,引入不可见节点以路由边缘可能会产生预期效果.

  • 如何设置端口属性? (3认同)
  • @dnivog只需在节点ID上添加一个“:”后跟端口即可(另请参见https://graphviz.gitlab.io/_pages/doc/info/lang.html),例如`node1:ne-> node2 :nw` (2认同)

Joe*_*ein 15

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

overlap = scale;
Run Code Online (Sandbox Code Playgroud)

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

overlap = false;
splines = true;
Run Code Online (Sandbox Code Playgroud)

对于大型图形,这将显着减慢生成时间.

  • [overlap](http://www.graphviz.org/doc/info/attrs.html#d:overlap)仅处理节点重叠,它与边缘重叠无关. (12认同)
  • 添加`graph [overlap = false,splines = true];`对我的重叠边缘也没有帮助. (5认同)
  • DOT引擎不支持`overlap`. (4认同)
  • 我在哪里将这些属性添加到图表中?我将它们插入到图形的主体中,结果没有变化. (2认同)

alf*_*lfC 8

即使对于非常简单的图,我也看到graphviz(neato,fdp)生成重叠.例如:

graph G {
0;
1;
2;
3;
0--1 ;
1--2 ;
2--3 ;
3--0 ;
}
Run Code Online (Sandbox Code Playgroud)

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

neato -Gstart=5 file.dot -Tps -o file.ps
Run Code Online (Sandbox Code Playgroud)