我想使用Graphviz dot(但愿意使用其他工具)生成一张有长的“主线”节点和许多小分支的图。我希望主线从左到右是直的,而小分支在其上方或下方。然而,Graphviz会“平衡”两个分支,所以最终得到了一个曲折的图。
为了说明问题,这里有一个类似于我目前得到的草图:
而这才是我真正想要的:
是否有任何方法可以强制或鼓励Graphviz 生成像第二个图那样的图形?我可以使用“虚拟”第二分支来进行3路布局,然后在之后隐藏/删除这些虚拟分支,但如果有更好的选择,那就更好了。
以下是使用边缘权重属性的解决方案:
digraph G {
rankdir="LR";
node[width=0.15, height=0.15, shape=point];
edge[weight=2, arrowhead=none];
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8;
edge[weight=1];
2 -> 9 -> 10 ;
5-> 11 -> 12;
}
结果:
使用节点的group属性的另一个解决方案——再次使用有向图:
来自graphviz点参考:
如果边的端点属于同一组,即具有相同的组属性,则设置参数以避免交叉并使边保持直线。
所以我们开始吧:
digraph g{
rankdir="LR";
node[width=0.15, height=0.15, shape=point, group=main];
edge[arrowhead=none];
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8;
node[group=branches];
2 -> 9 -> 10;
5 -> 11 -> 12;
}
输出与我的第一个答案完全相同。
edge[dir="none"]
。另一种选择是dir="back"
,它使用->
方向进行图形布局,但箭头指向相反方向。 - Sam Harwell