1 介绍
一次偶然的机会接触到了画图软件graphviz,它主要用于画有向图、《数据结构》课程里的数据结构图等比较方便。它与tikz的比较为:
- tikz可以画任何种类的图。因为tikz就相当于你拿着一个画笔,面对一张空白的纸做画,各种位置、布局都要自己控制;
- graphviz擅长于有向图等。它封装了底层的布局,位置关系等,有一些底层的算法在帮你做这些事情。
所以,我认为在graphviz擅长的领域,使用其画图特别方便。我可以说是一个画图爱好者,使用过多种多样的画图软件,每发现一个不免要点评一番,不周之处,敬请原谅。
2 使用初步
graphviz是一个软件,而要画图,你需要使用dot语言1,举下面一个例子:
digraph G {
main -> parse -> execute;
main -> init;
main -> cleanup;
execute -> make_string;
execute -> printf;
init -> make_string;
main -> printf;
execute -> compare;
}
得到的绘图结果为:
很方便吧!但是你若要想绘制更加丰富的图形,则需要使用各种各样的属性,用来控制结点、边等的样式。如下代码:
digraph G{
size ="4,4";
main [shape=box]; /* this is a comment */
main -> parse [weight=8];
parse -> execute;
main -> init [style=dotted];
main -> cleanup;
execute -> {make_string; printf}
init -> make_string;
edge [ color=red]; // so is this
main -> printf [style=bold,label="100 times"];
make_string [label="make a \nstring"];
node [shape=box,style=filled,color=".7 .3 1.0"];
execute -> compare;
}
输出的效果为:
短短的几行代码就可产生丰富的图形,方便我们版本控制,对图形进行自动化处理等工作。
3 图片保存
绘制好图片时,可将图片保存为各种各样的格式,如下:
点击layout按钮,产生图形:
然后再点击setting,即出现一个对话框,
Output File Type
里可以设置各种图片格式,如下图:
- Emden R. Gansner, Eleftherios Koutsofios, and Stephen North. Drawing graphs with dot. 2010. ↩