2011-02-03 18 views
3

私はグラフィックスと詳細で質問を更新しました。マラペットのおかげで、ハックがなければ、イメージとして望ましい結果を生み出すことができませんでした。上から下のgraphvizのドットグラフが反時計回りにレイアウトされるのはなぜですか?

なぜこのコードはこのグラフを生成しますか?

digraph { 
rankdir = TB; 
1 -> 2 -> 3 -> 1; 
} 

は、どのように私はGraphvizの/ドットは、このような時計回りの方向を生成するために得ることができますか?

更新

これは私が(論理的にこの方法を修正私の知る限り)を生成したい最後のグラフである

この結果を生成
digraph { 
    rankdir = TB 
    start -> 1 
    1 -> 2 -> 3 -> 1 
    3 -> end 
    3 -> increment 
    end -> product 
    {rank = same; 2; 3; increment} 
    {rank = same; end; product} 
} 

私はこの

おかげ

+0

'1> 1。 {ランク=同じ; 2; 4} 'も右回りのグラフを生成しますが、右回りになる可能性があります –

+1

これを「正しい」方法で行う方法の答えをお探しですか?私は99%が自動的にこの出力を生成する "魔法"命令がないことを確信しています、そして、他のものが望ましい出力(目に見えないノードなど)を達成する可能性があるものは、エッジ方向を逆転させるよりも、 Graphvizの強みは*自動的にグラフをレイアウトすることです。左から右にノードをレイアウトすることは正しいと思われます。手動で微調整する必要がある場合は、他のツールを使用するとより効果的で迅速に結果を得ることができます。 – marapet

+0

それから私は "正しい"道をもう探さないでしょう:)私はちょうどすべてが反時計回り(afaik)にレイアウトされているので、それを逆転させる設定がなければならないと考えました。しかし、私は本当にうまくいきません。 –

答えて

8

がなぜこのコードは、このグラフを作成しますか?したいものの

有向グラフのノードは、その関係に応じて異なるランクに配置されます。 1を2点にすると2を超え、3を2にすると3を超えます。 しかし、3も1を指すので、円が完成します.3つのノードのいずれかが上になることがあります。 Graphvizは最初に述べたノードを上に置きます。したがって、あなたが代わりに書いた場合、:

2 -> 3 -> 1 -> 2; 

ノード2は上になり、

3 -> 1 -> 2 -> 3; 

を使用した場合、ノード3は、最上位ノードになります。

おそらくレイアウトエンジンはneato時計回りの方向でグラフを生成する、このグラフのためのより適切であろう:

neato layout

どうしてもドットレイアウトエンジン、下記のドットコード

を使用する必要がある場合
digraph { 
    rankdir = TB; 
    1 -> 2; 
    3 -> 2 [dir=back]; 
    3 -> 1; 
    {rank=same; 2; 3;} 
} 

は、エッジ2-> 3を3-> 2に変更し、同時に矢印の方向を反転させることによって、所望の出力を生成する。

また、同じ技術の別の変形では説明が簡単です:すべて矢印(1-> 3-> 2-> 1)の順番を逆にしますが、逆方向に(dir =

rankdir = TB; 
edge[dir=back]; 
1 -> 3 -> 2 -> 1; 
{rank=same; 2;3;} 

このハックは、以下の結果が得られる:力ノード2および3は、同じランクになるように - > 2 - > 3 - > 4 -

hack

+0

ありがとうございます。私はLaTeXでdottexを使用しています。正直言って私はgraphviz/dot/neatoや、必要なものはほとんど経験していません。私が 'layout = neato'と書くと、グラフがすべて乱れてしまいます。 –

+0

しかし、あなたの最後に言及したハックは私のためのトリックを行います。私はこれが "正しい"答えではないかもしれないことを知っていますが、それは私が今必要なものです。ありがとうございました –

+0

'[dir = back]'トリックのおかげで、それはSphinx(デフォルトでドットレイアウトエンジンを使用しています)で私の望むグラフレイアウトを作成するのに役立ちました。 – vdboor

関連する問題