如何避免Graphviz点布局浪费空间,同一级别的不同大小的节点?

时间:2017-12-16 22:20:21

标签: graphviz dot

如果有一个最适合使用dot排列的graphviz有向图,是否有办法解决大型节点在同一级别的其他节点周围创建多余填充的问题?

例如,使用以下图表:

digraph {
    b[label="line 1\nline 2\nline 3\nline 4\nline 5\nline 6\n"];

    a -> b;
    a -> c;
    b -> f;
    c -> d;
    d -> e;
    e -> f;
}

(result of the above)

由于左手路径增加了在右手路径中不需要如此高的等级的高度,因此图形显然高于必要值。

是否有办法分别布局两条路径?我认为使用集群子图可能会有所帮助,但即使在这种情况下,等级高度似乎也是完全全局的。

我希望得到类似于此图片编辑的结果(请原谅其粗俗): enter image description here

1 个答案:

答案 0 :(得分:2)

作为解决方法,您可以尝试添加edge[constraint = false];
这将为所有边设置constraint属性值:

Rendered graph

或仅为部分边缘指定constraint属性。

编辑:我们可以在子图的帮助下获得非常接近的结果:

digraph {

    rankdir = LR;

    b[label="line 1\nline 2\nline 3\nline 4\nline 5\nline 6\n"];

    subgraph cluster_0 {

        rank = same;

        style = invis;

        a -> c -> d -> e -> f [constraint = false];

    }

    a -> b;
    b -> f;

}

将呈现如下:

Rendered graph