2008年8月3日星期日

用dot绘制有向图

Dot 是 Graphviz 套件中的一个重要工具,其可以方便地绘制有向图。
有向图是计算机科学中重要的表述手段,常见的 流程图 就是一种有向图。

Dot采用一种很简单的语言来描述有向图中的Node(节点)和Edge(边)。

在使用Dot前,应先浏览 Graphviz 安装目录下的 share/graphviz/doc/pdf/
下的 dotguide.pdf 文件,其中
P5 一个很好的样例,描述了Dot的基本使用方法,涵盖大多数 有向图 绘制
P10 Node(节点)的属性设置表
P11 Edge(边)的属性设置表
P12 Graph(图)的属性设置表,上述三张表可以打印出来作为常用参考
P26 介绍 subgraph 的使用样例,其可以更好地简化和复用
P38 Node(节点)的样式
P39 Arrow Head (边箭头)的样式
P40 Color(颜色)名称目录

在看完上述使用手册后,可以编写一个简单的样例代码试用一下 dot 命令。

dot 命令的详细手册在 dot.pdf 中

建议:
(1)在Windows平台下不要采用dot后缀,其和Word的DocumentTemplate相冲突,会自动打开Word而不是Dot命令,所以采用 dotg 后缀。
(2)如果要在图中采用中文,则要将文本存储为UTF-8格式,并且按照下面的方式来定义节点或者边中的文本字体

node[shape="box",fontname="simyou.ttf",fontsize="10"];


对于有向图,Graphviz套件中还有其它几个工具,都可以使用相同的Dot语言来描述,其生成的图按照不同的算法,呈现的形式有所不同,以适用不同的表述需求。

比如建立一个sample.dotg源代码文件后,可通过下面的批处理来生成多个有向图进行比较


dot -Tpng sample.dotg -o sample.dot.png
neato -Tpng sample.dotg -o sample.neato.png
twopi -Tpng sample.dotg -o sample.twopi.png
circo -Tpng sample.dotg -o sample.circo.png
fdp -Tpng sample.dotg -o sample.fdp.png