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

问题描述 投票:0回答:3

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

怎样才能使边缘不互相重叠?让它们互相交叉就可以了。

graphviz
3个回答
59
投票

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

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

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

  • 边缘集中器(concentrate=true):将具有公共端点的多个边缘合并为单个边缘,并且部分平行的边缘共享其路径的一部分。
  • 端口:边的起点和终点可以位于特定端口(n、ne、e、se、s、sw、w、nw、w、c、_)。根据边缘端口,边缘会改变其形式(样条线)。
  • 不可见节点:在某些情况下,向路由边引入不可见节点可能会达到预期的效果。

29
投票

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

overlap = scale;

如果您使用overlap=false,则可以通过添加属性

splines=true:

来消除边缘与节点的重叠
overlap = false;
splines = true;

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


14
投票

即使对于非常琐碎的图表,我也会看到

graphviz
(
neato
,
fdp
) 来生成重叠。例如:

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

在我的代码版本中产生一个十字

2.38.0

文档他们建议在这些情况下尝试使用不同的随机种子。最终对于更复杂的图表,交叉将是不可避免的,我不确定引擎在避免交叉方面付出了多少努力。

例如,这对我有用:

neato -Gstart=5 file.dot -Tps -o file.ps
© www.soinside.com 2019 - 2024. All rights reserved.