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 and X are on the same level, and so are leaf nodes B, D, and Z.
I unsuccessfully tried putting roots in one rank and leaves in another as follows:
digraph G { rankdir = TB; subgraph { A -> B A -> C C -> D X -> Y rank = same; A; X; rank = same; B; D; Y; } /* closing subgraph */ }
And got this outcome where everything is on the same rank.
Any suggestions about what I should be trying? I've already got roots and leaves identified.
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:
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; } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With