Graphviz – Fonts

Graphviz缺省使用Times Roman字体,所以在Windows上使用时没有任何问题,但是Fedora Core 5上并没有这个字体,dot命令会报错,说找不到该字体,并打印所有的搜索路径。

解决方法是,直接把Windows上的times.ttf复制到dot搜索目录中,或者按照Fedora FAQInstall Fonts安装更多的字体,然而由于安装目录不在dot的搜索目录中,所以要做一个符号链接,使dot能找到这些字体。如:

$ ln -s /usr/share/msttcorefonts /usr/X11R6/lib/X11/fonts/TrueType

Grahpviz – Basics

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];
}