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

问题描述 投票:3回答:1

当有一个最适合使用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

graphviz dot
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.