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

Graphviz:控制子图中节点的最小秩,graphviz,Graphviz,在下图中,如何将ClassB子图移动到与顶部对齐的ClassA右侧?也就是说,我想把B类中节点的排名提高到3。 我想使用不可见的虚拟节点是可能的,但我想不出来。我也希望有一个不太“特别”的解决方案 digraph G { graph [rankdir=LR]; 0 -> 1 -> 2 -> 3; subgraph cluster_SEM_SAD_analysis { graph [label="main"

在下图中,如何将ClassB子图移动到与顶部对齐的ClassA右侧?也就是说,我想把B类中节点的排名提高到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
您希望类B集群中的节点位于类1的method2以下的级别。您可以通过在它们之间引入不可见的边来实现这一点。这不是“特别的”,而是固有的
graphviz
逻辑

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

ClassA__method2 -> ClassB__method1[ style = invis, weight = 100 ];
你得到了什么

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

谢谢。我需要的是一条看不见的边,而不是一个节点。但是我会考虑这个特设,因为它需要计算出类中具有最大秩的节点和在类B中具有最小秩的节点,并在它们之间创建一个边缘。更一般的方法是类似“子图簇”{minrank=3;…}的方法,但我想这在dot中并不存在。不管怎样,这个解决方案目前还可以。