Graph 在点图中,如何移动簇并防止线不必要地交叉?
我正在使用Graphviz生成此图: 输出不是最优的。XZ线不必要地与XY线交叉;我希望Y高于X。我从doco尝试了许多选项,但都没有用。这就是我所期望的输出: 如何让Graphviz生成更好的优化图 注意:我想自动生成类似的图表,因此针对上述场景的解决方案(例如,X0->Y1、Y11->X03或其他场景中的不可见边)不会有帮助。我正在寻找一种能够普遍信任的方式,比如:Graph 在点图中,如何移动簇并防止线不必要地交叉?,graph,graphviz,dot,Graph,Graphviz,Dot,我正在使用Graphviz生成此图: 输出不是最优的。XZ线不必要地与XY线交叉;我希望Y高于X。我从doco尝试了许多选项,但都没有用。这就是我所期望的输出: 如何让Graphviz生成更好的优化图 注意:我想自动生成类似的图表,因此针对上述场景的解决方案(例如,X0->Y1、Y11->X03或其他场景中的不可见边)不会有帮助。我正在寻找一种能够普遍信任的方式,比如: A-X-B将是一条直线 如果Y不与Z交互,则Y将位于A-X-B之上 X->Y->X不会不必要地造成X节点之间的大间隙
- A-X-B将是一条直线
- 如果Y不与Z交互,则Y将位于A-X-B之上
- 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
}
这是不平凡的。我们欢迎志愿者帮助设计算法。埃姆登·甘斯纳(Emden Gansner)和我对dot进行了一次彻底的改革(对子图和长边使用更干净的数据结构,对mincross使用筛选),但我们没有完成。我们编写了新的级别分配cpde,我认为Emden重新侵入了旧的点布局引擎。如果有人想把它捡起来并进一步发展,可能需要几个月的努力。请通过graphviz.org与我们联系 一般来说,约束机器(如dot)可能有点脆弱。要么他们自己得到正确的解决方案,要么你可以添加一些调整,但只要输入发生一点变化,这些调整就会破坏一切,这是不好的。由于布局过程的连续性,例如,很难采用不同的级别分配来减少以后的交叉。如果有人想查找并实现它,在图形绘制会议上可能会有一些工作
斯蒂芬·诺斯谢谢斯蒂芬。继续努力,Graphviz是一个出色的工具。