我正在使用Graphviz生成此图表:
输出不是最佳的。 XZ线不必要地穿过XY线;我希望Y高于X.我已尝试过doco的许多选项,但无济于事。这是我期待的那种输出:
如何让Graphviz生成更好的优化图表?
注意:我想自动生成类似的图表,因此特定于上述场景的解决方案(例如,来自X0的隐形边缘 - > Y1,Y11 - > X03或诸如此类别)将无济于事。我正在寻找一种能够普遍信任的方式:
点文件内容为:
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
}
答案 0 :(得分:1)
这是非常重要的。我们欢迎志愿者帮助布局算法。 Emden Gansner和我在完全彻底检查dot(使用更清晰的子图和长边数据结构,并使用筛分mincross)方面取得了一个重大开端,但我们没有完成。我们写了一个新的关卡分配cpde,我认为Emden回溯到旧点布局引擎。如果有人想要接受它并进一步采取行动,可能需要几个月的努力。请通过graphviz.org与我们联系
一般来说,约束机器(如dot)可能有点脆弱。要么他们自己得到正确的解决方案,要么你可以添加一些调整,但一旦输入变化甚至一点点,调整就会破坏一切,这是不好的。由于布局过程的串行性质,很难例如支持不同的级别分配以便稍后减少交叉。如果有人想要查找并实现它,可能会在Graph Drawing会议中有一些工作。
Stephen North