web-dev-qa-db-fra.com

Comment placer des nœuds au même niveau dans DOT?

Je veux rendre plusieurs arbres simultanément et placer tous les nœuds racine et tous les nœuds feuilles au même niveau.

Voici un exemple de ce que j'essaie de faire. Les nœuds racines A et X sont au même niveau, tout comme les nœuds feuilles B, D et Z.

Graph I want

J'ai essayé en vain de mettre des racines dans un rang et de les laisser dans un autre comme suit:

digraph G { 
rankdir = TB;
subgraph {
A -> B
A -> C
C -> D
X -> Y
rank = same; A; X;
rank = same; B; D; Y;
} /* closing subgraph */
}

Et j'ai obtenu ce résultat où tout est au même rang. enter image description here

Des suggestions sur ce que je devrais essayer? J'ai déjà des racines et des feuilles identifiées.

33
Thalecress

Mettre le rank = same; ... déclarations entre accolades, par exemple:

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 */
}

... donne le résultat souhaité:

enter image description here

53
Simon

Voici un exemple simple inspiré du commentaire de @William John Holden -

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

graph

0
Brian Burns