五月 26, 2006

Grahpviz - Basics

Graphviz是用来画无环的有向图和无向图的,方法是:我们先用Graphviz特定语法描述这幅图,存为一个文本文件,然后利用Graphviz提供的dot程序将其转化为特定格式的图片,也可以直接用dot格式浏览器直接打开文本文件观看。

文本相对于二进制文件有很多好处,比如可以版本控制。一个经典游戏是找出两幅图中的不同之处。然而,如果这两幅图是由文本文件描述的,我们就可以使用diff程序来发现不同,这样观察不同版本之间的变化就非常容易。另一个好处是可以把自己程序里的数据结构(自动或手动)输入成dot文件,然后可视化其复杂关系。

前面一个例子很复杂,当然也展示了Graphviz的威力。这里展示两个简单的小例子,其文法简单明了,也无需我多做解释。第一个例子展示了编译器的工作:

Compiler reads c source file and generates assembly file as its output

相应的dot文件内容为:

digraph G {
    source_file -> compiler -> assembly_file;

    source_file [label="hello.c", shape=box];
    compiler [label="gcc"];
    assembly_file [label="hello.s", shape=box];
}

第二个例子类似doxygen生成类层次图的方式:

class hierarchy diagram

相应的dot文件内容为:

digraph G {
    shape -> circle [dir=back];
    shape -> rectangle [dir=back];
}

3 条评论:

时间 3:39 下午 , Anonymous H.J.LeoChen 说...

好东西。找类似的东西很久了。

用各种办法尝试过,SVG,VISIO二次开发等等甚至自己写一个简单的根据数据画图的东西。最终都不是很满意。

有了这东西,再用perl写几个小脚本,来生成代码,我想要的很多功能都能实现了。

谢谢分享。

 
时间 4:37 下午 , Blogger netcasper 说...

CPAN上有一些Graphviz module,最基本的是GraphViz.pm

 
时间 7:47 下午 , Anonymous h.j.leochen 说...

是的,很不错。。谢谢。

 

发表评论

指向此文章的链接:

创建链接

<< 主页