Graphviz是用来画无环的有向图和无向图的,方法是:我们先用Graphviz特定语法描述这幅图,存为一个文本文件,然后利用Graphviz提供的dot程序将其转化为特定格式的图片,也可以直接用dot格式浏览器直接打开文本文件观看。
文本相对于二进制文件有很多好处,比如可以版本控制。一个经典游戏是找出两幅图中的不同之处。然而,如果这两幅图是由文本文件描述的,我们就可以使用diff程序来发现不同,这样观察不同版本之间的变化就非常容易。另一个好处是可以把自己程序里的数据结构(自动或手动)输入成dot文件,然后可视化其复杂关系。
前面一个例子很复杂,当然也展示了Graphviz的威力。这里展示两个简单的小例子,其文法简单明了,也无需我多做解释。第一个例子展示了编译器的工作:
相应的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生成类层次图的方式:
相应的dot文件内容为:
digraph G { shape -> circle [dir=back]; shape -> rectangle [dir=back]; }
好东西。找类似的东西很久了。
用各种办法尝试过,SVG,VISIO二次开发等等甚至自己写一个简单的根据数据画图的东西。最终都不是很满意。
有了这东西,再用perl写几个小脚本,来生成代码,我想要的很多功能都能实现了。
谢谢分享。
CPAN上有一些Graphviz module,最基本的是GraphViz.pm
是的,很不错。。谢谢。