【问题标题】:How to prevent edges in graphviz to overlap each other如何防止graphviz中的边缘相互重叠
【发布时间】:2011-04-27 10:12:48
【问题描述】:

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

如何使边缘不相互重叠?让它们相互交叉就可以了。

【问题讨论】:

  • 阅读文档graphviz.gitlab.io/_pages/pdf/neatoguide.pdf 第 4 节。它说无法防止边缘重叠。它说这是“未来工作的领域”。我有一个非常大的图表,因此重叠=比例会产生非常小的打印,重叠=假是愚蠢的密集!我希望有一种方法可以做一点 voronoi 和一点规模,而不是非此即彼。
  • 经过一些试验,我对dot -Granksep=2 -Gnodesep=1 -Grankdir=LR -Gsplines=ortho -Nshape=box 很满意。您可以增加框和sep 的大小,最终获得零重叠。不幸的是,neato 和 twopi 不允许使用 nodeep,所以你被 dot 困住了

标签: graph-theory graphviz overlap


【解决方案1】:

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

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

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

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

【讨论】:

【解决方案2】:

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

overlap = scale;

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

overlap = false;
splines = true;

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

【讨论】:

  • 我在哪里将这些属性添加到图表中?我将它们插入到图表的主体中,结果没有任何变化。
  • 添加 graph [overlap=false, splines=true]; 也无助于我的重叠边缘。
  • overlap 不受 DOT 引擎支持。
  • overlap 只处理节点重叠,与边缘重叠无关。
  • 请注意,这些可以在控制台上指定,如下所示:neato -Goverlap=false -Gsplines=true -Tpdf inputFile > outputFile
【解决方案3】:

即使对于非常微不足道的图表,我也看到 graphviz (neato, fdp) 会产生重叠。例如:

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

【讨论】:

  • 链接现在好像坏了(2018-05-31)。这个正在工作:graphviz.gitlab.io/faq/#FaqNeatoEdgeCrossings
  • 如何使用我的输入设置参数? stackoverflow.com/questions/52562208/…
  • @alfC 请点击链接,我解释命令行并提供示例。我使用的是neato 和 dot,在这两种情况下,有些边缘都被简单地交叉了。
  • @skan,我找到了,但是我没有找到命令行,你能在这里重复一遍吗?
  • 我正在使用 R 中的 Diagrammer。我告诉它在内部使用 Graphviz 来生成图表。我首先定义节点和边,定义一些属性,例如neato布局,并将所有内容存储在“图形”上。最后我使用命令 render_graph(graph)
猜你喜欢
  • 1970-01-01
  • 2014-04-30
  • 2013-07-23
  • 2017-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
  • 1970-01-01
相关资源
最近更新 更多