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
相关命令行参数请参考: