26

Graphviz dotを使用して(ただし、他の何かを使用してもかまいません)、ノードの長い「メインライン」と多くの小さなブランチを持つグラフを生成しようとしています。メインラインを左から右にまっすぐにし、その上または下に小さな枝を配置したいと思います。ただし、Graphvizは2つのブランチの「バランスをとる」ので、曲がったグラフになってしまいます。

説明のために、これが私が現在得ているものに似たスケッチです:

現在のグラフ

そして、これは私が実際に欲しいものです:

募集グラフ

Graphvizに2番目のようなグラフを生成するように強制または奨励する方法はありますか?「ダミー」の2番目のブランチを使用して、3方向のレイアウトを実行し、後でダミーを非表示/削除することができる場合がありますが、より良いオプションがある場合は、それが望ましいでしょう。

4

2 に答える 2

39

以下は、エッジの重み属性を使用したソリューションです。

digraph G {
    rankdir="LR";
    node[width=0.15, height=0.15, shape=point];
    edge[weight=2, arrowhead=none];
    1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8;
    edge[weight=1];
    2 -> 9 -> 10 ;
    5-> 11 -> 12;
}

結果:

グラフビズ

于 2011-01-12T17:08:47.807 に答える
36

ノードのgroup属性を使用する 2 番目のソリューション- 再び有向グラフ:

graphviz ドット リファレンスから:

エッジの端点が同じグループに属している場合、つまり同じグループ属性を持っている場合、交差を回避してエッジを直線に保つようにパラメータが設定されます。

だからここに行きます:

digraph g{
    rankdir="LR";
    node[width=0.15, height=0.15, shape=point, group=main];
    edge[arrowhead=none];
    1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8;
    node[group=branches];
    2 ->  9 -> 10;
    5 -> 11 -> 12;
}

出力は、最初の回答とまったく同じです。

于 2011-01-12T20:20:46.617 に答える