Graphvizを使用して単純な有限状態マシングラフを視覚化しようとしています。Graphvizによって作成されたレイアウトは、完全に私の好みではありません。エッジが短く、よりコンパクトな結果を期待していました。
これまで、グループを使用してエッジの重みを変更してみましたが、あまりうまくいきませんでした。Graphvizがグラフをそのように描画する理由と、そのアルゴリズムを自分の好みに合わせて調整する方法は、私にはわかりません。それを達成するために設定できるパラメータはありますか?または、別のコマンドを使用する必要がありdot
ますか?試してみneato
ましたが、結果がめちゃくちゃになってしまい、何をしているのかよくわかりません...
これはこれまでの私の最高の結果です:
これよりも優れたレイアウトを視覚化しようとすると、たとえばこの写真の矢印で示されているように、赤いボックスの配置が異なる場合、グラフの見栄えが良くなると思います。
私は以前dot
グラフを作成していましたが、彼のソースコードは次のとおりです。
1 digraph JobStateDiagram
2 {
3 rankdir=LR;
4 size="8,5";
5
6 node [style="rounded,filled,bold", shape=box, fixedsize=true, width=1.3, fontname="Arial"];
7 Created [fillcolor=black, shape=circle, label="", width=0.25];
8 Destroyed [fillcolor=black, shape=doublecircle, label="", width=0.3];
9 Empty [fillcolor="#a0ffa0"];
10 Announced [fillcolor="#a0ffa0"];
11 Assigned [fillcolor="#a0ffa0"];
12 Working [fillcolor="#a0ffa0"];
13 Ready [fillcolor="#a0ffa0"];
14 TimedOut [fillcolor="#ffa0a0"];
15 Failed [fillcolor="#ffa0a0"];
16
17 {
18 rank=source; Created Destroyed;
19 }
20
21 edge [style=bold, fontname="Arial" weight=2]
22 Empty -> Announced [ label="announce" ];
23 Announced -> Assigned [ label="assign" ];
24 Assigned -> Working [ label="start" ];
25 Working -> Ready [ label="finish" ];
26 Ready -> Empty [ label="revoke" ];
27
28 edge [fontname="Arial" color="#aaaaaa" weight=1]
29 Announced -> TimedOut [ label="timeout" ];
30 Assigned -> TimedOut [ label="timeout" ];
31 Working -> TimedOut [ label="timeout" ];
32 Working -> Failed [ label="error" ];
33 TimedOut -> Announced [ label="announce" ];
34 TimedOut -> Empty [ label="revoke" ];
35 Failed -> Announced [ label="announce" ];
36 Failed -> Empty [ label="revoke" ];
37
38 edge [style=bold, fontname="Arial" weight=1]
39 Created -> Empty [ label="initialize" ];
40 Empty -> Destroyed [ label="finalize" ];
41 Announced -> Empty [ label="revoke" ];
42 Assigned -> Empty [ label="revoke" ];
43 Working -> Empty [ label="revoke" ];
44 }
また、上記のGraphvizファイルで奇妙なことをした場合は、誰かに知らせてください。フィードバックをいただければ幸いです。
アップデート:
ユーザーmarapetによって与えられたポートのようないくつかの提案をもっと実験して試してみると、私の混乱が増しました...たとえば、下の写真では、直線ではなく、とdot
のためにこれらの奇妙な迂回路を描くことを選択するのはなぜですか?Working->Failed
Failed->Announced