作者:南火,E-mail:nanhovan@126.com
标题:用graphviz绘出特殊图形
欢迎转载这篇文章,转载时需注明来源,作者,作者E-mail。
先看一幅图形:
若你要画出上面的这一副图你会使用什么样的工具呢?也许你试着直接用Word来画,但你马上发现在Word中要画出这一幅图形可不是那么容易的事;也许你 试着直接用Windows自己带的画图板来画,但你马上也发现还是不容易画出这一幅图形;好了,你开始动用大家伙Adobe工具了,但令你沮丧的是,画出 它可要浪费很多时间。 有没有方便一点的方法呢?答案是使用graphviz吧,它就是专处理此类图形的好手。你可以到 http://www.graphviz.org下载安装,记住了,它不仅免费,还开放源代码呢。根据你使用的操作系统下载相应的graphviz,安装后,只用简单的方法就可绘出上面的图形了。下面的讲解主要针对Linux操作系统,若你用Windows也一样。打开你喜欢的编辑器,在其中输入如下代码:
将其使用utf8编码保存为demo.dot(如使用Windows的记事本书写以上代码,保存时选择编码为utf8)。
现打开终端,输入命令:
你即可得到上面的图形了,是简单的吧。当然你也许感到还是很难,那是你害怕源代码。其实不用害怕,你只需稍划时间即可学会。graphviz使用的是 dot语法,很简单的。现就对dot语法做一简介。dot语言支持三种对象:graphs(图象),nodes(节点),edges(边)。图象对象可以 是有向图(digraph)和无向图(graph)。dot会自动为你的图形进行布局,其布局时使用无向图方式,即把无向图也看成是有向图。在一个主图象 内还可使用sbugraph(子图)来定义节点和边的集合。dot语言语法主要关键字有:graph(无向图),digraph(有向图),nodes (节点),edge(边)。各对象都有属性,nodes(节点),edge(边)对象使用[和]来表示,[]内属性与属性间使用";"隔开。属性具有形式 “属性名=属性值”。而graph(无向图),digraph(有向图)属性可不用[],直接“属性名=属性值”即可。如:
表示节点名为node0,具有属性labe(标签),且标签值为"<f0> |<f1> G|<f2> "(该标签中的<f0>据有特殊含义)。
又如:
表示边对象main -> init据有属性style(样式),且style为dotted(点线)。
graphviz对象在源代码中是如何体现的呢?我们来看下面的源代码:
该代码对应图形为:
graphviz读入以上源代码,并开始逐字扫描分析程序。由上面的解释(/**/和//用于graphviz的注释),可以用于知道图象对象是整个源代 码,node1之类的是节点,而用->连着的两个节点是边对象(如main -> cleanup)。graphviz中三种对象各自的对象属性较多,详细的情况请参考graphviz的帮助文档,当然你不用害怕,常用的就那么几个。关 于dot语法这次暂就介绍这么多吧,从上,你可看出dot语法很好理解的吧。完整的语法学习参考graphviz的帮助文档。
再来几张图片看看graphviz能做什么?:
标题:用graphviz绘出特殊图形
欢迎转载这篇文章,转载时需注明来源,作者,作者E-mail。
先看一幅图形:
![](http://nanhovan.blog.sohu.com/images/person/2006/3/28/1143545977475_8112.jpeg)
若你要画出上面的这一副图你会使用什么样的工具呢?也许你试着直接用Word来画,但你马上发现在Word中要画出这一幅图形可不是那么容易的事;也许你 试着直接用Windows自己带的画图板来画,但你马上也发现还是不容易画出这一幅图形;好了,你开始动用大家伙Adobe工具了,但令你沮丧的是,画出 它可要浪费很多时间。 有没有方便一点的方法呢?答案是使用graphviz吧,它就是专处理此类图形的好手。你可以到 http://www.graphviz.org下载安装,记住了,它不仅免费,还开放源代码呢。根据你使用的操作系统下载相应的graphviz,安装后,只用简单的方法就可绘出上面的图形了。下面的讲解主要针对Linux操作系统,若你用Windows也一样。打开你喜欢的编辑器,在其中输入如下代码:
digraph g { |
现打开终端,输入命令:
[my@localhost ~]$dot -Tjpeg demo.dot -o demo.jpeg |
node0[label = "<f0> |<f1> G|<f2> "]; |
又如:
main -> init [style=dotted] |
graphviz对象在源代码中是如何体现的呢?我们来看下面的源代码:
digraph G { /*表示要画一个名为g的无向图*/ |
![](http://nanhovan.blog.sohu.com/images/person/2006/3/28/1143546123242_7825.jpeg)
graphviz读入以上源代码,并开始逐字扫描分析程序。由上面的解释(/**/和//用于graphviz的注释),可以用于知道图象对象是整个源代 码,node1之类的是节点,而用->连着的两个节点是边对象(如main -> cleanup)。graphviz中三种对象各自的对象属性较多,详细的情况请参考graphviz的帮助文档,当然你不用害怕,常用的就那么几个。关 于dot语法这次暂就介绍这么多吧,从上,你可看出dot语法很好理解的吧。完整的语法学习参考graphviz的帮助文档。
再来几张图片看看graphviz能做什么?:
![](http://nanhovan.blog.sohu.com/images/person/2006/3/28/1143546168843_8561.jpeg)
![](http://nanhovan.blog.sohu.com/images/person/2006/3/28/1143546208397_2455.jpeg)
![](http://nanhovan.blog.sohu.com/images/person/2006/3/28/1143546254025_5313.gif)