首页 > 解决方案 > Graphviz:控制子图中节点的最小等级

问题描述

在下图中,如何将 ClassB 子图移动到与顶部对齐的 ClassA 的右侧?即我想将 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

解决方案


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

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

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

你得到

在此处输入图像描述

这可能是你想要的。对齐顶部的第三个簇是由weight = 100元素实现的。


推荐阅读