Вертикальное упорядочение Graphviz

У меня есть набор узлов GraphViz, таких как:

digraph {
    A->B;
    A->C;
    A->D;
}

Но B, C и D происходят последовательно во времени!

введите здесь описание изображения

Было бы здорово, если бы был какой-то способ указать вертикальный уровень, на котором должен появиться каждый узел (где количество уровней может быть заранее неизвестно).

У кого-нибудь есть мысли, как это реализовать?


person Richard    schedule 11.10.2013    source источник


Ответы (1)


Одним из способов отображения узла в другом ранге (вертикальном уровне) по сравнению с другим узлом является добавление невидимых ребер. Присвоение этим узлам одного и того же group означает, что graphviz по возможности размещает их по прямой линии.

Например:

digraph g{
  A;
 node[group=a];
 B;C;D;
 A -> B;
 A -> C;
 A -> D;
 edge[style=invis];
 B->C->D;
}

введите здесь описание изображения

Другой вариант — иметь одну вертикальную линию (невидимых) узлов, а затем принудительно задать один и тот же ранг, определив узлы одного и того же ранга в одном и том же подграфе с помощью rank=same:

digraph g{
 {rank=same; l1[style=invis, shape=point]; A;}
 {rank=same; l2[style=invis, shape=point]; B;}
 {rank=same; l3[style=invis, shape=point]; C;}
 {rank=same; l4[style=invis, shape=point]; D;E;F;}

 A -> B;
 A -> C;
 A -> D;
 edge[style=invis];
 l1->l2->l3->l4;
}

введите здесь описание изображения

person marapet    schedule 11.10.2013
comment
Спасибо! Один из способов добавления невидимых ссылок для выражения последовательного отношения прекрасно работает для меня. Просто и мило! - person Yu Shen; 02.04.2018