2010-06-27 117 views
21

我已經得到了我想要的Graphviz佈局和可視化我的圖表。該圖有122個邊和123個節點。邊緣有4種不同的類型,我希望它們在視覺上可以區分。但是我還沒有決定什麼是這樣做的最好的方式,我想與錶盤周圍玩了一下。不幸的是,我沒有看到任何類似邊的「class」或「stylesheet」屬性。我只能爲每個邊緣單獨設置視覺屬性(大量重複)。也許我錯過了什麼?是否可能有某種方式將邊緣添加到4個不同的組中,然後對組進行設計,而不是單獨設計每個邊緣?的Graphviz:如何在同一樣式分配到一組邊緣?

回答

30

爲了通過組樣式邊緣(或節點)而不是單獨使用子圖

像這樣:

digraph G { 

node [style=filled,color="#5D8AA8", fillcolor="#5D8AA8"]; 

subgraph c1 { 
    edge [color="#004225", arrowsize="0.6", penwidth="1"]; 
    "node 1" -> "node 3"; 
    "node 5" -> "node 7"; 
    "node 1" -> "node 2"; 
    label = ""; 
} 

subgraph c2 { 
    edge [color="#FBEC5D", arrowsize="1.2", penwidth="3"]; 
    "node 2" -> "node 4"; 
    "node 4" -> "node 6"; 
    "node 3" -> "node 5"; 
    "node 6" -> "node 8"; 
    label = ""; 

} 

begin -> "node 1"; 
start -> "node 2"; 
"node 1" -> "node 4" 
"node 2" -> "node 6"; 

start [shape=diamond];} 

所以,如果你把上面的代碼在一個文件瓦特/「.DOT」擴展名;然後呈現在graphviz的,,你會看到不同類型的邊,外觀睿智。

一種類型是隻是默認(顏色=黑色,厚度= 1等)。 - 即,這些邊緣未分配給子圖。

另外兩種類型的邊(一個薄的,深綠色基和厚,明亮的黃色組)基於分配兩個子集羣之一樣式。

子圖經常被用來在視覺上加亮一個節點集羣(即,從在圖中的節點的其餘部分區分節點的特定連續「組」);然而,沒有任何要求(正如你可以從我的例子中看到的那樣),你選擇通過賦值給一個給定的子圖來選擇樣式的邊緣,屬於一個連續的「節點組」,你可以指定你希望賦值給的任何邊一個給定的子圖。)

給我,按組造型節點類似於定義一個類並將其分配到的div的HTML標記集合的HTML實踐

+0

我們如何設置子圖的默認風格? – Pacerier 2014-07-16 19:48:50

+1

不需要子圖。在邊緣樣式聲明下使用「edge [color = ... etc]」定義的所有邊將使用該樣式。 – Bousch 2015-08-19 10:18:58

12

雖然@豆豆的答案是正確的(使用子圖指定風格相近的對象組),我相信我的例子是更好:

digraph G {                  
    compound=true; 
    subgraph columns { 
    c0r0 -> c0r1; 
    c0r1 -> c0r2; 
    c1r0 -> c1r1; 
    c1r1 -> c1r2; 
    c2r0 -> c2r1; 
    c2r1 -> c2r2; 
    } 
    subgraph rows { 
    edge [color=red, constraint=false]; 
    c0r0 -> c1r0; 
    c1r0 -> c2r0; 
    c0r1 -> c1r1; 
    c1r1 -> c2r1; 
    c0r2 -> c1r2; 
    c1r2 -> c2r2; 
    } 
} 


cat square-digraph.dot | dot -Tsvg -o square-digraph.svg 

the resulting graph

+1

完美,簡單完美。 – Pacerier 2014-07-16 20:00:48

+1

爲什麼它更好?不是要批評你。我不知道graphviz足夠了解它是如何更好,我有興趣找出答案。 – 2015-04-06 14:45:07

+0

我只是喜歡結果圖。解決方案的原理沒有什麼不同。 – bukzor 2015-04-12 13:51:23