使用Graphviz绘图(一)


前言

平常开发或者编写课程论文时,除了代码文档的编写,其中一个很重要的部分就是须要绘制流程图、示意图算法

绘制流程图有不少工具,通常常见的就有以下几种:vim

  • Word、PPT等办公软件
  • Viso以及开源的Dia
  • 画图(MSPaint)、PS、AI
  • PicPicke
  • 在线流程图绘制(eg. www.processon.com)

对于这些软件不管功能强大与否,适合与否,方便与否,都具备一个特色——所见即所得。你制做过程当中看到的就是最终获得的结果。图中形式、布局在制做过程当中都由本身设置,其实还有一类绘图系统的存在,其思想是——所思即所得。其中具备表明性的软件就是——Graphviz。Graphviz是贝尔实验室开发的一个开源的工具包,它使用一个特定的DSL(领域特定语言)——Dot做为脚本语言,而后使用布局引擎解析脚本并完成自动布局。Graphviz的设计初衷是对图进行自动布局(有向图、无向图、),可使用dot脚原本定义图形元素,选择必定的算法进行布局,经过对输入脚本的解析,分析出其中的点,边以及子图,而后根据属性进行绘制,继而将结果以本身须要的格式导出来。浏览器

相对于其余的绘图软件,Granphviz的特色有以下几个方面:编辑器

  • 代码控制,所思即所得
  • 布局引擎自动布局
  • (导出格式很是丰富)

以下即为Graphivz官网上的一些示例效果:svg

一个生成有向图的小例子

咱们先来看一个小例子来看一下使用Graphviz绘制一张图的完整流程(我使用的是Ubuntu 14.04 LTS,在其它系统上的使用应该差很少,下面再也不标注了)。工具

要使用Graphviz,先要在系统上安装Graphviz。在Ubuntu上可使用命令sudo apt-get install graphviz进行安装,在其余系统安装的方法能够查看Graphviz官网进行查看。程序安装好以后咱们就可已使用了。布局

Step 1:首先,须要编辑dot脚本编码

可使用你熟悉的纯文本编辑器进行脚本编写(必须是纯文本编辑器,如vim、notepad++,像word这样的富文本编辑器是不行的),只需设置编码为UTF-8。设计

编辑下面的脚本代码,保存为test.dot(先不用管其具体的意思,直接复制就好了):code

digraph G{
    main -> parse -> execute;
    main -> init;
    main -> cleanup;
    execute -> make_string;
    execute -> printf;
    init -> make_string;
    main -> printf;
    execute -> compare;
}

Step 2:随后,选用布局生成结果

使用以下命令生成结果:
dot -Tpng sample.dot -o sample.png

对于这条命令,dot表示用dot布局,-Tpng表示生成png图片格式,sample.dot脚本文件名-o sample.png表示生成输出的图片名称

改命令也能够写成dot -Kdot -Tpng sample.dot -o sample.png,其中-Kdot表示使用dot布局。

Graphviz支持几种布局引擎:

  • dot : 默认布局方式,主要用于有向图
  • neato : 主要用于无向图
  • twopi : 主要用于径向布局
  • circo : 圆环布局
  • fdp : 主要用于无向图
  • sfdp : 主要绘制较大的无向图
  • patchwork : 主要用于树哈希图(tree map)

Graphviz支持的输出图片格式更是至关的多,经常使用的有如下几种:

  • pdf :
  • gif
  • png :
  • jpeg : 一种有损压缩图片格式
  • bmp : 一种位图格式
  • svg : 矢量图,通常用与Web,,能够用浏览器打开
  • ps : 矢量线图,多用于打印
    更多的输出格式能够浏览Graphviz输出格式进行查看。

Step 3:查看生成结果

输出的图片,能够用支持相应图片格式的软件打开。Graphviz软件安装好以后,有一个图片浏览器能够进行图片预览,只需输入命令display sample.png便可(sample.png为生成的图片文件名),该示例预览结果以下(你能够在上一步使用不一样的布局方式,查看一下结果有什么不一样):

正确完成三个步骤获得结果说明Graphviz已经能够在你的系统中正确安装可使用了。后续我会介绍Graphviz Dot脚本的具体编写方法。

相关文章
相关标签/搜索