2012-02-06 82 views
13

我想要使用graphviz可視化樹結構,問題是隨着圖形變大graphviz開始重新排列節點的順序。說我有以下防止graphviz重新排列節點

A 
/| \ 
B C D 

成爲,

A 
/| \ 
B D C 

它可能這樣做是爲了節省空間,但不管我曾嘗試加入節點的我的上下文順序,

graph [ordering="out"]; 

但它沒有改變輸出。

編輯:

digraph bt { 
graph [ordering="out"]; 
node [style="rounded", shape=box] 
N_2386 -> N_2387 
N_2387 -> N_2388 
N_2388 -> N_2389 
N_2388 -> N_2390 
N_2387 -> N_2391 
N_2386 -> N_2392 
subgraph cluster_2393 { 
labeljust = "l"; 
style=dashed;color="#B0B0B0" 
N_2392 -> N_2394 
N_2394 -> N_2395 
N_2395 -> N_2396 
N_2396 -> N_2397 
N_2397 -> N_2398 
N_2397 -> N_2399 
N_2396 -> N_2400 
N_2400 -> N_2401 
N_2400 -> N_2402 
N_2395 -> N_2403 
N_2403 -> N_2404 
N_2404 -> N_2405 
N_2405 -> N_2406 
N_2403 -> N_2407 
N_2407 -> N_2408 
N_2408 -> N_2409 
N_2409 -> N_2410 
N_2410 -> N_2411 
N_2411 -> N_2412 
N_2412 -> N_2413 
N_2412 -> N_2414 
N_2412 -> N_2415 
N_2411 -> N_2416 
N_2416 -> N_2417 
N_2416 -> N_2418 
N_2416 -> N_2419 
N_2408 -> N_2420 
N_2408 -> N_2421 
N_2403 -> N_2422 
N_2395 -> N_2423 
N_2392 -> N_2424 
} 
} 

圖中的問題我需要的是,N_2387應該在右邊N_2392應在左邊。這是我插入它們的順序。

+1

你有沒有偶然的解決這個問題?不幸的是我有同樣的問題。 – tantrev 2014-04-23 18:48:52

回答

5

我嘗試以下

digraph g { 
    ordering=out ; 
    node [shape=box] ; 

    a -> b ; a -> c ; a -> d ; a -> e ; a -> f ; 
    a -> g ; a -> h ; a -> i ; a -> j ; a -> k ; 
    a -> l ; a -> m ; a -> n ; a -> o ; a -> p ; 
    a -> q ; a -> r ; a -> s ; a -> t ; a -> u ; 
    a -> v ; a -> w ; a -> x ; a -> y ; a -> z ; 
} 

和所有節點b - z是在正確的順序相同的水平。 你使用的是什麼版本?

+0

我已經更新到最新的相同的事情發生我已經添加到問題的問題圖。 – 2012-02-06 23:25:52

1

如果您將第一個分支更改爲子圖,則兩個子圖將按文件中的順序排列。

看來,子圖作爲正常節點的更高優先級,因此ordering=out似乎不被尊重。

這工作:

digraph bt { 
    graph [ordering="out"]; 
    node [style="rounded", shape=box] 
    N_2386 -> N_2387 
    subgraph cluster_first { 
    N_2387 -> N_2388 
    N_2388 -> N_2389 
    N_2388 -> N_2390 
    N_2387 -> N_2391 
    } 
    N_2386 -> N_2392 
    subgraph cluster_2393 { 
    labeljust = "l"; 
    style=dashed;color="#B0B0B0" 
    N_2392 -> N_2394 
    N_2394 -> N_2395 
    N_2395 -> N_2396 
    N_2396 -> N_2397 
    N_2397 -> N_2398 
    N_2397 -> N_2399 
    N_2396 -> N_2400 
    N_2400 -> N_2401 
    N_2400 -> N_2402 
    N_2395 -> N_2403 
    N_2403 -> N_2404 
    N_2404 -> N_2405 
    N_2405 -> N_2406 
    N_2403 -> N_2407 
    N_2407 -> N_2408 
    N_2408 -> N_2409 
    N_2409 -> N_2410 
    N_2410 -> N_2411 
    N_2411 -> N_2412 
    N_2412 -> N_2413 
    N_2412 -> N_2414 
    N_2412 -> N_2415 
    N_2411 -> N_2416 
    N_2416 -> N_2417 
    N_2416 -> N_2418 
    N_2416 -> N_2419 
    N_2408 -> N_2420 
    N_2408 -> N_2421 
    N_2403 -> N_2422 
    N_2395 -> N_2423 
    N_2392 -> N_2424 
    } 
} 
+0

問題是我正在編程生成這些圖形,我不知道它會如何看起來像。 – 2012-02-07 01:14:25

2

如果你想要的特定項目使用它們之間一個看不見的邊緣控制順序。結合排名指令給你很多控制權。

例如:這裏是一個樣本tagcloud從Graphviz的佈局:

/* 
Using a graph and relationships just to push things onto different lines. 
Two layout rules: 
1) all items on a given line go into a "rank=same" phrase 
2) a relationship is needed between the first word on each line and the next line down to 
    force the vertical alignment. 
*/ 
digraph { 
    edge[style=invisible] 
    node[shape=none] 

    fred [fontsize=18] 
    harry [fontsize=8] 
    jack [fontsize=12] 
    sally [fontsize=12] 
    mika 
    amy 
    jan 
    jack -> fred 
    fred -> mika 
    {rank=same;fred;harry} 
    {rank=same;mika amy; jan} 
} 
0

Graphviz的設計生成具有賞心悅目的外觀圖。試圖強制佈局失敗了該工具的許多價值。如上所述,不可見邊可用於強制執行某些佈局,而詞典排序(較早的節點傾向於放在更多左邊)也可指示偏好。

通常,在佈局中添加更多約束會產生非常難以排除故障的錯誤佈局。

與預期佈局有些偏差不應該自動導致嘗試強制結果。更少的約束使得生成的圖形隨着時間的推移而變化,即使它們在外觀上可以從根本上改變。