Подтвердить что ты не робот

Как разместить узлы на одном уровне в DOT?

Я хочу сделать несколько деревьев одновременно и поместить все корневые узлы и все листовые узлы на один уровень.

Вот пример того, что я пытаюсь сделать. Корневые узлы A и X находятся на одном уровне, а также листовые узлы B, D и Z.

Graph I want

Я безуспешно пытался положить корни в один ранг и ушел в другой следующим образом:

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

И получил этот результат, когда все находится на одном ранге. enter image description here

Любые предложения о том, что я должен попробовать? У меня уже есть корни и листья идентифицированы.

4b9b3361

Ответ 1

Ввод операторов rank = same; ... в фигурные скобки, например:

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

... дает желаемый результат:

enter image description here

Ответ 2

Вот простой пример, вдохновленный комментарием @William John Holden -

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

graph