4

私は次のツリーを持っています:

digraph G {
    subgraph cluster0{
        37[label="+"];
        42[label="a"];
        44[label="b"];
        47[label="*"];
        46[label="c"];
        49[label="d"];
        51[label="e"];
        53[label="f"];
        55[label="g"];
        57[label="h"];
        61[label="*"];
        60[label="i"];
        63[label="j"];
        37 -> 42[label="c"];
        37 -> 44[label="c"];
        37 -> 47[label="c"];
        37 -> 61[label="c"];
        42 -> 37[label="p"];
        44 -> 37[label="p"];
        47 -> 37[label="p"];
        47 -> 46[label="c"];
        47 -> 49[label="c"];
        47 -> 51[label="c"];
        47 -> 53[label="c"];
        47 -> 55[label="c"];
        47 -> 57[label="c"];
        46 -> 47[label="p"];
        49 -> 47[label="p"];
        51 -> 47[label="p"];
        53 -> 47[label="p"];
        55 -> 47[label="p"];
        57 -> 47[label="p"];
        61 -> 37[label="p"];
        61 -> 60[label="c"];
        61 -> 63[label="c"];
        60 -> 61[label="p"];
        63 -> 61[label="p"];
    }
}

出力はこちら: http://i.imgur.com/q1qXkCT.png

*最初のサブツリーの子の順序は:G H C D E Fですが、そうである必要がありますC D E F G H。注文を削除すれば正しいことに気づきましたsubgraph cluster0{が、この方法ではできません。他の解決策を提案できますか?

4

1 に答える 1

2

Graphviz は、他に制約がない場合、ノードの字句順序を保持しようとします。ただし、エッジ ラベルはスペースを占有し、ノードを移動させる可能性があるため、配置に影響を与える可能性があります。

重要な特定の順序がある場合は、次のようなものを試してください

{ rank = same; 
46 -> 49 -> 51 -> 53 -> 55 -> 57 [style = invis];
}

追加の順序制約をグラフに導入します。

ただし、予測が非常に困難な方法でより複雑なグラフを歪める可能性があるため、これには注意する必要があります。

クラスタは、暗黙のうちにサブグラフをよりコンパクトにしようとし、クラスタ以外のメンバーが交差できない境界ボックスを導入しようとするため、大きなグラフでは問題をさらに複雑にします。

于 2013-09-23T13:09:42.350 に答える