MaartenB
MaartenB

Reputation: 475

Graphviz: control minimum rank of nodes in subgraph

In the graph below, how do I move the ClassB subgraph to the right of ClassA aligned at the top? I.e. I want to increase the rank of the nodes in ClassB to 3. I guess it might be possible using invisible dummy nodes, but I can't figure it out. Also I'm hoping there's a less "ad hoc" solution.

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
    }

enter image description here

Upvotes: 1

Views: 151

Answers (1)

vaettchen
vaettchen

Reputation: 7659

You need to tell graphviz that you want the nodes in the Class B cluster on the level below method2 of Class 1. You achieve that by introducing an invisble edge between them. This is not "ad hoc", but inherent graphviz logic.

Add, as a last line of your code

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

and you get

enter image description here

which is probably what you want. Aligning the third cluster at the top is achieved by the weight = 100 element.

Upvotes: 1

Related Questions