2

我正在使用 Graphviz 生成此图: 我得到了什么

输出不是最优的。XZ 线不必要地穿过 XY 线;我希望 Y 高于 X。我尝试了 doco 的许多选项,但无济于事。这是我期待的输出: 我想要的是

如何让 Graphviz 生成更好的优化图表?

注意:我想自动生成类似图表,因此特定于上述场景的解决方案(例如,来自 X0 -> Y1、Y11 -> X03 或诸如此类的不可见边缘)将无济于事。我正在寻找一种能够普遍信任以下内容的方法:

  • AXB 将是一条直线。
  • 如果 Y 不与 Z 交互,则 Y 将高于 AXB。
  • X->Y->X 不会不必要地在 X 节点之间造成大的间隙。

点文件内容为:

digraph G {
  rankdir=LR

  subgraph cluster_x {
    node [style=filled,color=green]
    "X.0" -> "X.0.1" -> "X.0.2" -> "X.0.3" -> "X.0.4"
  }

  subgraph cluster_y {
    node [style=filled,color=lightblue]
    "Y.1" -> "Y.1.1"
  }

  subgraph cluster_z {
    node [style=filled,color=crimson]
    "Z.1" -> "Z.1.1"
    "Z.2"
  }

  A -> "X.0"
  "X.0.1" -> "Y.1"
  "X.0.1" -> "Z.2"
  "X.0.2" -> "Z.1"
  "Y.1.1" -> "X.0.2"
  "Z.1.1" -> "X.0.4"
  "Z.2" -> "Z.1.1"
  "X.0.4" -> B
}
4

1 回答 1

2

这是不平凡的。我们欢迎志愿者帮助布局算法。Emden Gansner 和我对 dot 进行了彻底的改造(为子图和长边使用更清晰的数据结构,并为 mincross 使用筛选),但我们还没有完成。我们编写了新的关卡分配 cpde,我认为 Emden 已将其入侵到旧的点布局引擎中。如果有人想把它捡起来并走得更远,可能需要几个月的努力。通过 graphviz.org 联系我们

一般来说,约束机器(如 dot)可能有点脆弱。要么他们自己得到正确的解决方案,要么你可以添加一些调整,但只要输入发生一点变化,调整就会破坏一切,这并不好。由于布局通道的连续性,例如很难支持不同的级别分配以减少以后的交叉。如果有人想查找并实施它,Graph Drawing 会议中可能会有一些工作。

斯蒂芬诺斯

于 2013-08-20T20:07:04.530 回答