2012-12-31 96 views
4

我有一張從左到右的圖。然而,這個圖有一些元素,我想要相對於另一個節點進行定位。舉例來說,如果我有這樣的圖表:強制節點直接位於另一個節點的下方

digraph "Test" { 
    rankdir = "LR" 
    A -> B 
    B -> C 
    D -> B 
    note -> B 

    note [ shape="house" ] 
}; 

它呈現這樣的:

Normal DOT layout

不過,我想在「說明」節點總是被直接定位在節點下方其中它的指向,這樣的(手動創建)圖:

Desired DOT layout

我已經試過了subgr試驗aph與另一個rankdir並擺脫rankconstraint屬性,但一直沒有成功實現這個工作,因爲我只是在玩DOT幾天。

回答

5

這裏是你可以做什麼:定義之前枚舉節點邊緣和約束節點A同一級別的節點note通過把它們放在一個

digraph "Test" { 
    rankdir = "LR" 
    A;D; 
    {rank=same; note; B;} 
    C; 

    A -> B 
    B -> C 
    D -> B 
    B -> note [dir=back] 

    note [ shape="house" ] 
}; 

請注意,爲了有節點note下面的節點A,我不得不扭轉邊緣方向並添加dir=back以使箭頭正確繪製。

graphviz output

+2

+1這證明是其結果中最一致的,並讓我繼續下去。謝謝! :) –

+0

^^^同意!能夠直接控制隊伍對我來說絕對是新聞,謝謝你把它明確地寫出來! – sjm324

3

用於移動節點的一般技術是創建不可見的邊。在你的情況,你可以創建一個從A的邊緣note,標記它看不見,然後標記從note邊緣B非約束:

A -> note [style="invis"]; 
note -> B [constraint=false]; 
+0

+1這不是我的情況下工作得非常一致的,但它是一個有趣的技術。謝謝! –

相關問題