木をバックボーンとするグラフがあります。たとえば、ノードAに子B、C、Dがあるとします。グラフがトップダウンで描画されていると仮定すると、Aは1つのレベルになり、次にB、C、Dになります。graphvizを強制的に実行したいと思います。それらをランク内でB、C、Dの順に配置します。これは可能ですか?もしそうなら、どのように?
A、B、C、Dしかない場合は、入力ドットファイルにB、C、Dの順に配置するだけでこの効果を得ることができます。ただし、B、C、D以外のエッジがある場合、順序が乱れることがあります。それは私が避けたいことです。
これは、図のように「見えない」エッジで実現できます。それがどのように機能するかを説明するコメントに注意してください。
digraph test{
// make invisible ranks
rank1 [style=invisible];
rank2 [style=invisible];
// make "invisible" (white) link between them
rank1 -> rank2 [color=white];
// declare nodes all out of desired order
A -> D;
A -> B;
A -> C;
A -> E;
// even these new connection don't mess up the order
B -> F -> G;
C -> F -> G;
{
rank = same;
// Here you enforce the desired order with "invisible" edges and arrowheads
rank2 -> B -> C -> D -> E [ style=invis ];
rankdir = LR;
}
}