graphviz是貝爾實驗室開發的一個開源的工具包,它使用一個特定的DSL(領域特定語言):dot作為腳本語言,然后使用布局引擎來解析此腳本,並完成自動布局。
graphviz中包含了眾多的布局器:
- dot 默認布局方式,主要用於有向圖
- neato 基於spring-model(又稱force-based)算法 基於斥力+張力的布局
- twopi 徑向布局
- circo 圓環布局
- osage
- fdp 用於無向圖
- sfdp 用於無向圖
有向圖相關布局
除了 fdp 之外,其他都可以適用於 有向圖。 對下面有向圖采用不同布局器產生的效果如下:
有向圖的定義用關鍵字digraph定義一個有向圖,用“ -> ”表示節點之間的關系
digraph G {
main -> parse -> execute;
main -> init;
main -> cleanup;
execute -> make_string;
execute -> printf
init -> make_string;
main -> printf;
execute -> compare;
}
dot 布局
dot 22.gv -Kdot -Tpng -o 22dot.png
由於 Kdot 是默認, 所以可以簡化成 dot 22.gv -Tpng -o 22dot.png
circo 布局
命令: dot 22.gv -Kcirco -Tpng -o 22circo.png
圓環布局
neato 布局
命令: dot 22.gv -Kneato -Tpng -o 22neato.png
twopi 布局
命令:dot 22.gv -Ktwopi -Tpng -o 22twopi.png
osage 布局
無向圖的布局
無向圖的定義用關鍵字graph定義一個無向圖,用“ - - ”表示節點之間的關系,如下:
graph test123 {
a -- b -- c;
a -- {x y};
x -- c ;
x -- y ;
}
dot 布局
dot 33.gv -Kdot -Tpng -o 33dot.png
circo 布局
dot 33.gv -Kcirco -Tpng -o 33circo.png
neato 布局
dot 33.gv -Kneato -Tpng -o 33neato.png
twopi 布局
dot 33.gv -Ktwopi -Tpng -o 33twopi.png
osage 布局
dot 33.gv -Kosage -Tpng -o 33osage.png
fdp布局
dot 33.gv -Kfdp -Tpng -o 33fdp.png
sfdp布局
dot 33.gv -Ksfdp -Tpng -o 33sfdp.png
DOT 語言
http://lesliezhu.github.io/public/dot-begin.html
相關命令行參數請參考: