2014-11-23 2 views
6

Я получил этот граф точек и хочу, чтобы узлы A и D, B и E и C и F были выровнены. Вот код, связанный с точкой:Graphviz Точное вертикальное выравнивание узлов

digraph{ 

A 
B 
C 
D 
E 
F 

{rank = same; B; C} 
{rank = same; E; F} 

A -> B [label="2", weight=2] 
A -> C [label="0", style=dashed, weight=2] 
B -> C [label="0", style=dashed, weight=2] 
B -> D [label="2", style=dashed, weight=2] 
C -> D [label="0", weight=2] 
D -> E [label="1", style=dashed, weight=2] 
D -> F [label="0", weight=2] 
E -> F [label="0", weight=2] 
F -> A 
} 

Как вы можете видеть, что я уже пытался применить веса к краям, но это не сработало

enter image description here

ответ

16

можно использовать group атрибут узлов, предлагающий выравнивание ребер между узлами одной и той же группы по прямой.

Объявляет узлы с атрибутом группы:

A [group=g1] 
{rank = same; B[group=g2]; C[group=g3]} 
D [group=g1] 
{rank = same; E[group=g2]; F[group=g3]} 

Затем убедитесь, что все эти узлы имеют (невидимый) ребро между ними:

edge[style=invis]; 
A -> D 
B -> E 
C -> F 

Все вместе:

digraph G { 
    A [group=g1] 
    {rank = same; B[group=g2]; C[group=g3]} 
    D [group=g1] 
    {rank = same; E[group=g2]; F[group=g3]} 

    A -> B [label="2", weight=2] 
    A -> C [label="0", style=dashed, weight=2] 
    B -> C [label="0", style=dashed, weight=2] 
    B -> D [label="2", style=dashed, weight=2] 
    C -> D [label="0", weight=2] 
    D -> E [label="1", style=dashed, weight=2] 
    D -> F [label="0", weight=2] 
    E -> F [label="0", weight=2] 
    F -> A 

    edge[style=invis]; 
    A -> D 
    B -> E 
    C -> F 
}