您的位置:首页 > 理论基础 > 数据结构算法

结构化图形绘制利器Graphviz

2015-11-04 18:39 453 查看
引言

Graphviz的强大

示例

自动布局

附安装方法

版权声明:本文为 西风逍遥游 原创文章,转载请注明出处 西风世界 http://blog.csdn.net/xfxyy_sxfancy

引言

以前我在写博客的时候,最发愁的就是画图,尤其是一些数据结构的展示,或一些算法的图示。一般我是用手绘板,软件就用MyPaint,做出图后,往往调整和修改十分困难。

Graphviz的强大

但自从我得知的Graphviz这款神器后,我便不再担心图形的绘制困难了。因为,这是一款脚本化的绘图工具,先用文本描述结构内容,再由计算机自动生成图片,方便快捷,比手绘精度又高,而且还容易修改。

Graphviz诞生于大名鼎鼎的贝尔实验室,最早是一款图自动布局工具,但其提供的dot脚本,对于结构化图形描述十分便捷,只需要编写对图形的描述,便可以自动生成合理布局的图片,非常方便。

示例

例如下面这是一幅有限状态机图:

digraph finite_state_machine {
rankdir=LR;
size="8,5"
node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8;
node [shape = circle];
LR_0 -> LR_2 [ label = "SS(B)" ];
LR_0 -> LR_1 [ label = "SS(S)" ];
LR_1 -> LR_3 [ label = "S($end)" ];
LR_2 -> LR_6 [ label = "SS(b)" ];
LR_2 -> LR_5 [ label = "SS(a)" ];
LR_2 -> LR_4 [ label = "S(A)" ];
LR_5 -> LR_7 [ label = "S(b)" ];
LR_5 -> LR_5 [ label = "S(a)" ];
LR_6 -> LR_6 [ label = "S(b)" ];
LR_6 -> LR_5 [ label = "S(a)" ];
LR_7 -> LR_8 [ label = "S(b)" ];
LR_7 -> LR_5 [ label = "S(a)" ];
LR_8 -> LR_6 [ label = "S(b)" ];
LR_8 -> LR_5 [ label = "S(a)" ];
}


在安装好graphviz后,我们将其保存成fsm.gv,然后执行指令:

dot ./fsm.gv -Tjpg -o fsm.jpg


这样就可以生成图片了,如下图:



自动布局

dot是其中的一种很常见的布局方式,表示的是层次布局法,下面就依次介绍几种常见的:

dot - 层级布局,分层绘制,对于有向图十分适合

neato - 基于力的布局,适合无向图,节点间相互关系并不紧密,也没有规定的起点或终点的

circo - 环状布局

怎么样,官网上还有更多示例,可供参考:http://www.graphviz.org/Gallery.php

附:安装方法

Ubuntu很简单,直接就可以了:

sudo apt-get install graphviz


Windows下应该去官网下载其安装包:http://www.graphviz.org/Download.php
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息