图形可视化工具Graphviz中的边缘布局,用于固定节点位置。

5
我正在尝试编写自己的小型算法来进行图形布局,它仅创建节点布局但不定义边路由。当我使用Graphviz将生成的dot文件转换为图形时,边是直线,穿过节点甚至相互重叠。有没有办法使用Graphviz将边的布局与dot算法一样好,但在预定的固定位置上放置节点?
例如,您可以在以下图表中看到效果:
digraph test {
  "a" [pos="0.0,0.0"];
  "b" [pos="50.0,50.0"];
  "c" [pos="100.0,100.0"];
  "a" -> "b";
  "a" -> "c";
  "b" -> "c";
}

当使用dot -Knop -Tpng -otest.png test.dotty绘制时,a和c之间的线穿过了b。我的要求是所有节点保持它们的位置,但是a和c之间的线路要绕过b。

你能发布一个样本图(算法的输出)吗?现在你如何调用Graphiz(命令行+参数)? - marapet
@marapet 我已经添加了一个例子。 - Hans-Peter Störr
为什么 https://graphviz.org/docs/attrs/pos/ 页面中 pos 属性只适用于 neato 和 fdp?这里它与 dot 一起使用了? - Wizard of Kneup
1
@WizardofKneup 这里使用了参数-Knop,它将“nop”(无操作)作为布局算法,因为我想让节点不移动。但那是很久以前的事情了。 :-) - Hans-Peter Störr
1个回答

7

只需添加:

splines=true;

将以下结果添加至你的图表中:

graphviz sline edges


太好了,谢谢!只是有点遗憾的是,在这种情况下无法使用concentrate。8-) - Hans-Peter Störr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接