我使用graphviz创建了一个图表,但问题是边缘彼此重叠(每行有5-7个节点),因此很难确定每个节点连接的节点。
我该如何使边缘不重叠?让它们相交也可以。
我使用graphviz创建了一个图表,但问题是边缘彼此重叠(每行有5-7个节点),因此很难确定每个节点连接的节点。
我该如何使边缘不重叠?让它们相交也可以。
我假设您有一个用dot布局的有向图。
我认为没有一个神奇的开关可以防止重叠边缘。Graphviz会尝试默认实现这一点。
以下是一些根据图形可能会有所帮助的建议:
另一种方法是给图形添加一个overlap属性。允许的属性是scale(这将极大地增加输出的大小)或false(这不会增加太多的大小,但可能会导致边重叠在节点上)。
overlap = scale;
如果你正在使用 overlap=false,你可以通过添加属性 splines=true
来消除节点之间的边缘重叠:
overlap = false;
splines = true;
对于大型图形,这将明显减慢生成时间。
neato -Goverlap=false -Gsplines=true -Tpdf inputFile > outputFile
。 - Anssssss即使是相当微不足道的图形,我也会使用graphviz
(neato
, fdp
)来生成重叠部分。例如:
即使对于相当平凡的图表,我也使用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
render_graph(graph, "-Gstart=5 file.eps")
。 - alfC
dot -Granksep=2 -Gnodesep=1 -Grankdir=LR -Gsplines=ortho -Nshape=box
获得了不错的效果。您可以增加方框的大小和间距,并最终实现零重叠。不幸的是,neato和twopi不允许使用nodesep,所以您只能使用dot。 - John Henckel