2010-03-19 91 views

回答

9

我不知道,通過這些來控制單個節點的位置的任何手段。它沒有任何意義,因爲爲了做到這一點,您需要知道最終圖的樣子,但手動放置一個節點會改變圖的其餘部分的渲染方式。

我通過更改在.dot文件中定義我的節點的順序,並在圖層級調整nodesepranksep屬性來解決此問題。這是一個細化的過程 - 每次調整一些東西,直到看起來正確。

您也可以將圖形呈現爲SVG,然後將其導入到Visio(或其他編輯器)中,然後手動重新排列您不滿意的節點。

+1

我不認爲Visio可以編輯一般的svg,但Inkscape可以。 – 2014-10-01 01:31:21

+0

@GringoSuave:Inkscape確實可以,但如果移動節點,邊緣不會跟隨。這使得除了極少數節點之外的任何東西都不切實際。 – 2015-10-28 15:00:50

+2

這是不正確的,不應該被接受的答案。以下答案分別是30和20票,每個答案都是很好的答案。 – 2017-04-14 01:18:36

22

@Jannis,如果你想繼續在回答這個,有實際控制單個節點放置的方式 - 使用「POS」屬性:

http://www.graphviz.org/doc/info/attrs.html#d:pos

作爲這樣的一個例子,你可以寫:

n [pos="3,5!"]; 

這將迫使節點n是在精確(3,5)

但是,這隻適用於佈局引擎「fdp」和「neato」。

+18

'pin'屬性(!),是「fdp,neato only」(它不適用於點)。因此,除非你繞過點佈局引擎,否則使用'pos'對於點來說沒有意義。 – nobar 2011-03-03 20:24:17

+1

@nobar:嗯,再次看着文檔看起來你是對的 - 我的壞,對不起。 – 2011-03-05 16:24:48

+0

我注意到了!也不適用於fdp,雖然它適用於neato。此外,應該管理「pos」屬性中給定座標的縮放的-s參數(默認值爲72.0)似乎不起作用(導致段錯誤)。總之:將所有'pos'屬性的數字除以72.0,並使用'neato'作品! – 2014-11-20 09:10:30

35

您可以創建一個不可見約束,以使紅色節點出現在所有其他節點的左側。

redNode -> leftmostNode [style=invis]; 

前:

before

後:

after

+1

這解決了我的問題。我只是想讓別的東西出現在另一邊。謝謝。 – 2011-11-06 08:49:36

5

我喜歡@smokris' [style=invis]伎倆說服graphviz的把你想要他們的東西,通過增加邊這會影響佈局但不可見。


另一個竅門是constraint attribute,它可以讓你添加的邊緣這是可見的,但不會影響佈局。

如果添加新邊緣會使圖形出現混亂,請在該邊上設置[constraint=false]:現在graphviz在放置節點時將忽略它。

如果是false,則不用邊排序節點。例如,在 圖表

digraph G { 
    a -> c; 
    a -> b; 
    b -> c [constraint=false]; 
} 

邊緣b -> c不秩分配期間添加約束,因此唯一的約束是一個 高於b和c,得到的圖形: