How do I place nodes on the same level in DOT?

后端 未结 3 1083
攒了一身酷
攒了一身酷 2021-01-31 15:09

I want to render several trees simultaneously and place all root nodes and all leaf nodes on the same level.

Here\'s an example of what I\'m trying to do. Root nodes A a

相关标签:
3条回答
  • 2021-01-31 15:46

    Putting the rank = same; ... statements in braces, e.g.:

    digraph G { 
      rankdir = TB;
      subgraph {
        A -> B
        A -> C
        C -> D
        X -> Y
        // note that rank is used in the subgraph
        {rank = same; A; X;}
        {rank = same; B; D; Y;}
      } /* closing subgraph */
    }
    

    ... gives the desired result:

    enter image description here

    0 讨论(0)
  • 2021-01-31 15:52

    The ideal structure is actually rank max and rank min. No need for a subgraph or any other shenanigans. GraphViz has explicit facilities for this.

    With complex graphs, rank=same will often end up near the middle of the graph. If you mean top and bottom, say top and bottom.

    digraph G { 
    
      rankdir = TB;
    
      A -> B;
      A -> C -> D;
      X -> Y;
    
      { rank=min; A; X; }
      { rank=max; B; D; Y; }
    
    }
    

    0 讨论(0)
  • 2021-01-31 16:03

    Here's a simple example inspired by @William John Holden's comment -

    graph {
      rankdir=LR;
      a -- b -- c;
      d -- e -- f;
      b -- d; {rank = same; b; d;};
    }
    

    0 讨论(0)
提交回复
热议问题