点:避免树太水平

时间:2018-07-19 20:24:48

标签: graphviz dot

我有以下图形:

digraph G {
    user1  -> SuperUser
    user2  -> SuperUser
    user3  -> SuperUser
    user4  -> SuperUser
    user5  -> SuperUser
    user6  -> SuperUser
    user7  -> SuperUser
    user8  -> SuperUser
    user9  -> SuperUser
    user10 -> SuperUser
    user11 -> SuperUser
    user12 -> SuperUser
    user13 -> SuperUser
}

然后我使用

渲染它:
$ dot -Tpng test_dot -o test_dot.png

是否存在避免这样的水平渲染的方法? https://github.com/vuejs/vue/issues/6709

我知道我可以使用rankdir = LR,但是我的问题与我想的一样 enter image description here

我想要一个以上层次的组织,这可能吗?

编辑:tk421的答案很好,但我忘了补充一点,即我的图形很大,并且大小不可预测,因此解决方案不能是“手动的”

1 个答案:

答案 0 :(得分:1)

是的。您可以使用rank和不可见链接(style = invis)来创建以下级别:

digraph G {
    user1  -> SuperUser
    user2  -> SuperUser
    user3  -> SuperUser
    user4  -> SuperUser
    user5  -> SuperUser
    user6  -> SuperUser
    user7  -> SuperUser
    user8  -> SuperUser
    user9  -> SuperUser
    user10 -> SuperUser
    user11 -> SuperUser
    user12 -> SuperUser
    user13 -> SuperUser
    user5 -> user4 [ style = invis ];
    user9 -> user10 [ style = invis ];
    { rank = same; user1; user2; user3; user4 }
    { rank = same; user5; user6; user7; user8; user9 }
    { rank = same; user10; user11; user12; user13}
}

这将产生:

enter image description here

当然,您可以尝试一下,让它看起来像您想要的样子。

graphviz软件包中还包含其他布局样式工具。 例如,如果您想要更圆的图,则可以使用twopi代替dot

$ twopi -Granksep=2  sample.dot -o twopi.png

enter image description here

有关更多信息,请参考Graphviz的Documentation