Jak umieścić węzły na tym samym poziomie W DOT?

Chcę renderować kilka drzew jednocześnie i umieścić wszystkie węzły korzeniowe i wszystkie węzły liści na tym samym poziomie.

Oto przykład tego, co próbuję zrobić. Węzły korzeniowe A i X znajdują się na tym samym poziomie, podobnie jak węzły liściowe B, D i Z.

Graf chcę

Bezskutecznie starałem się umieścić korzenie w jednej randze, a liście w innej w następujący sposób:

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

I mam taki wynik, w którym wszystko jest na tej samej pozycji. Tutaj wpisz opis obrazka

Wszelkie sugestie co do Powinienem próbować? Mam już zidentyfikowane korzenie i liście.

Author: Thalecress, 2014-09-08

3 answers

Umieszczanie wypowiedzi rank = same; ... w klamrach, np.:

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

... daje pożądany rezultat:

Tutaj wpisz opis obrazka

 64
Author: Simon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-27 17:08:04

Oto prosty przykład zainspirowany komentarzem @ William John Holden -

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

Graf

 6
Author: Brian Burns,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-13 15:10:54

Idealną strukturą jest w rzeczywistości ranga max i ranga min. Nie ma potrzeby stosowania podgrafu ani żadnych innych sztuczek. GraphViz ma do tego wyraźne udogodnienia.

W przypadku złożonych wykresów, rank = same często kończy się w pobliżu środka wykresu. Jeśli masz na myśli górę i dół, powiedz góra i dół.

digraph G { 

  rankdir = TB;

  A -> B;
  A -> C -> D;
  X -> Y;

  { rank=min; A; X; }
  { rank=max; B; D; Y; }

}

Tutaj wpisz opis obrazka

 4
Author: John Haugeland,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-28 05:50:19