26

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

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

当前图表

这就是我真正想要的:

通缉图

有什么方法可以强制或鼓励 Graphviz 生成像第二个一样的图形?我也许可以使用“虚拟”第二个分支让它进行 3 向布局,然后隐藏/删除虚拟对象,但如果有更好的选择,那就更好了。

4

2 回答 2

39

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

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

结果:

图形化

于 2011-01-12T17:08:47.807 回答
36

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

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

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

于 2011-01-12T20:20:46.617 回答