2011-11-07 11 views
1

在上一個問題(Block diagram layout with dot/Graphviz)之後,我還有其他問題。下面是這樣編譯的:點的框圖節點的更好佈局

dot -Gsplines = none test.gv | NEATO -n -Gsplines =鄰-Tpng -otest.png

digraph G { 
    graph [rankdir = LR]; 

    node[shape=record, style=filled]; 

bar[label="Bar", height=1.3636363636363635]; 
tea[label="Tea", height=1.3636363636363635]; 
brew[label="Brew", height=3.6363636363636362]; 
bar1[label="Bar1", height=2.2727272727272725]; 
baz[label="Baz", height=1]; 
foo[label="Foo", height=5.0]; 
darjeeling[label="Darjeeling", height=3.1818181818181817]; 
example[label="Example", height=17.727272727272727]; 

bar -> example [label="bar_clk"]; 
bar -> example [label="bar_bar"]; 
example -> tea [label="bli1"]; 
example -> tea [label="blo2"]; 
example -> tea [label="blo3"]; 
example -> brew [label="bli"]; 
example -> brew [label="blo"]; 
example -> brew [label="blo"]; 
example -> brew [label="blo"]; 
example -> brew [label="blo"]; 
example -> brew [label="blo"]; 
example -> brew [label="blo"]; 
example -> brew [label="blo"]; 
bar1 -> example [label="bar1_foo"]; 
bar1 -> example [label="bar1_bar"]; 
bar1 -> example [label="bar1_baz"]; 
bar1 -> example [label="bar1_baz1"]; 
bar1 -> example [label="bar1_bar2"]; 
baz -> example [label="baz_foo"]; 
example -> foo [label="bla"]; 
example -> foo [label="bla"]; 
example -> foo [label="bla"]; 
example -> foo [label="bla"]; 
example -> foo [label="bla"]; 
example -> foo [label="bla"]; 
example -> foo [label="bla"]; 
example -> foo [label="bla"]; 
example -> foo [label="bla"]; 
example -> foo [label="bla"]; 
example -> foo [label="bla"]; 
example -> bar [label="blu"]; 
example -> baz [label="ble"]; 
darjeeling -> example [label="darjeeling_bli1"]; 
darjeeling -> example [label="darjeeling_blo2"]; 
darjeeling -> example [label="darjeeling_blo3"]; 
darjeeling -> example [label="darjeeling_bli1"]; 
darjeeling -> example [label="darjeeling_blo2"]; 
example -> darjeeling [label="bla"]; 
darjeeling -> example [label="darjeeling_blo3"]; 
} 

我的問題是我怎麼能走,說,巴茲和大吉嶺節點,並將其移動到左側以降低的高度中間節點。我不知道是什麼決定了這一點。我知道這是一個方向圖,所以圖的一般「流」是從左到右,我只是想更多的控制。

這些圖將自動生成,因此,如何根據需要解釋說明以及爲什麼,而不是使其適用於此特定示例的代碼片段是首選。

謝謝!

回答

2

幾個要點:

我怎麼能走,說,巴茲和大吉嶺節點,並將其移動到左側

通過設置constraint=false的邊緣從實例去巴茲大吉嶺,或通過分組的所有節點出現左的在一個子圖與rank=min

你可能會說,這不是一個合適的解決方案(至少不是一個與constraint=false),因爲

這些圖會自動生成

,我完全理解(在那裏許多次) - 但同時,您希望

降低中間節點的高度

被設置手動,使圖形仍然未完全自動生成(你如何計算出需要的高度?)。

我不知道是什麼決定了這個

我不能完全肯定既不 - 巴茲可能還不如在左邊。

令人驚訝地,順序的節點的外觀的變化在某些情況下的佈局。例如,如果向上移動「大吉嶺」節點的定義,它將出現在左側(並且位於右側)。


編輯:這裏談到的代碼片段...

第三種可能性是在順序(自上而下/左右)和裝飾邊緣,確定所有邊緣回到dir=back

如果更改這些3行

example -> bar [label="blu"]; 
example -> baz [label="ble"]; 
example -> darjeeling [label="bla"]; 

bar -> example [label="blu", dir=back]; 
baz -> example [label="ble", dir=back]; 
darjeeling -> example [label="bla", dir=back]; 

example -> bar [label="blu", constraint=false]; 
example -> baz [label="ble", constraint=false]; 
example -> darjeeling [label="bla", constraint=false]; 

(和改變example高度)

你會得到

graphviz result

+0

感謝您的回答。子圖可能工作。我也可以把一些約束=假的東西放在那裏,只需要玩一些。現在根據對其的邊緣數量計算高度;這很容易改變。我意識到改變秩序,但沒有讓雙方更加平衡。將玩與子圖和報告,謝謝! – Christoph

+0

對不起,已經遲到了。這看起來非常有希望,所以這是公認的答案! – Christoph