在Graphviz中强制“主线”节点成直线(或替代)

时间:2011-01-12 16:31:47

标签: graphviz dot

我正在尝试使用Graphviz点(但我愿意使用其他东西)生成一个带有长“节点主线”和许多小分支的图形。我希望主线从左到右是直的,在它上面或下面有小分支。但是,Graphviz“平衡”了两个分支,所以我最终得到了一个弯曲的图形。

为了说明,这是一个类似于我目前得到的草图:

Current Graph

这就是我真正想要的:

Wanted graph

有没有办法强制或鼓励Graphviz生成第二个图形?我或许可以使用“虚拟”第二个分支来进行三向布局,然后隐藏/删除虚拟对象,但是如果有更好的选择则更好。

2 个答案:

答案 0 :(得分:36)

以下是使用边缘的权重属性的解决方案:

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;
}

结果:

graphivz

答案 1 :(得分:32)

使用节点的属性的第二个解决方案 - 再次是有向图:

从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;
}

输出与我的第一个答案完全相同。