0

Graphviz のレイアウトを制御するのに問題があります。単純なオートマトンを作成しようとしています。起源:

digraph mygraph {
rankdir=LR;
size="13,13"
node [shape = circle];
init   -> Ready  [ label = "" ];

Ready -> P1  [ label = "t<T\n----TexT----" ];
P1  -> Ready [ label = "t>T" ];
P1  -> B1    [ label = "t<T" ];
B1  -> P1    [ label = "----TexT----" ];
B1  -> U1    [ label = "----TexT----" ];

Ready -> P2  [ label = "t<T\n----TexT----" ];
P2 -> Ready  [ label = "t>T" ];
P2 -> B2     [ label = "t<T" ];
B2 -> P2     [ label = "----TexT----" ];
B2 -> U2     [ label = "----TexT----" ];


U1  -> Ready [ label = "----TexT----", constraint=false];
U2  -> Ready [ label = "----TexT----", constraint=false];

P1 -> P2 [ label = "t<T\n----TexT----", constraint=false];
P2 -> P1 [ label = "t<T\n----TexT----", constraint=false];
}

問題は、ラベルが絡み合っていることです。1. スペースを大きくする 2. エッジの一部を上に移動する 3. ラベルの配置を制御する

どうすればいいのですか? グラフ.png

4

1 に答える 1

1

競合は、同じランク (P1 と P2) にドットで配置されたノード間で反対方向に進む垂直エッジで発生するため、垂直ランク方向を使用して (「rankdir=LR」行を削除)、これらの特定のエッジのラベルが次のようになるようにすることができます。横に並べるのではなく、上下に並べます。

確かに、これはこの種の問題の普遍的な解決策ではありませんが、グラフを不必要に肥大化させることなく、ここで役立つはずです (「nodesep」を介してノード分離を増やすことで可能になります)。

于 2012-06-05T13:15:45.950 に答える