Graphviz:控制子图中节点的最小等级

Graphviz: control minimum rank of nodes in subgraph

在下图中,如何将 ClassB 子图移动到 ClassA 的右侧,并在顶部对齐? IE。我想将 ClassB 中的节点等级提高到 3。 我想使用不可见的虚拟节点可能是可能的,但我无法弄清楚。我也希望有一个不那么“临时”的解决方案。

digraph G {
    graph [rankdir=LR];
    0 -> 1 -> 2 -> 3;
        subgraph cluster_SEM_SAD_analysis {
            graph [label="main"];
            main [label="main"];
        }
        subgraph cluster_ClassA {
            graph [label="ClassA"];
            ClassA__method1 [label="method1"];
            ClassA__method2 [label="method2"];
        }
        subgraph cluster_ClassB {
            graph [label="ClassB"];
            ClassB__method1 [label="method1"];
            ClassB__method2 [label="method2"];
        }
        main -> ClassA__method1;
        ClassA__method1 -> ClassB__method1;
        ClassA__method1 -> ClassA__method2;
        ClassA__method1 -> ClassB__method2
    }

您需要告诉 graphviz 您希望 Class B 集群中的节点位于 method2[= Class 1 的 28=]。您可以通过在它们之间引入一条无形的边缘来实现这一点。这不是“临时”,而是固有的 graphviz 逻辑。

添加,作为代码的最后一行

ClassA__method2 -> ClassB__method1[ style = invis, weight = 100 ];

你得到

这可能就是您想要的。对齐顶部的第三个簇是通过 weight = 100 元素实现的。