用graphviz绘出特殊图形
来源:互联网 发布:淘宝店铺专业版 编辑:程序博客网 时间:2024/06/07 08:45
作者:南火,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。
先看一幅图形:
若你要画出上面的这一副图你会使用什么样的工具呢?也许你试着直接用Word来画,但你马上发现在Word中要画出这一幅图形可不是那么容易的事;也许你 试着直接用Windows自己带的画图板来画,但你马上也发现还是不容易画出这一幅图形;好了,你开始动用大家伙Adobe工具了,但令你沮丧的是,画出 它可要浪费很多时间。 有没有方便一点的方法呢?答案是使用graphviz吧,它就是专处理此类图形的好手。你可以到http://www.graphviz.org下载安装,记住了,它不仅免费,还开放源代码呢。根据你使用的操作系统下载相应的graphviz,安装后,只用简单的方法就可绘出上面的图形了。下面的讲解主要针对Linux操作系统,若你用Windows也一样。打开你喜欢的编辑器,在其中输入如下代码:
digraph g {
node [shape = record,height=.1];
node0[label = "<f0> |<f1> G|<f2> "];
node1[label = "<f0> |<f1> E|<f2> "];
node2[label = "<f0> |<f1> B|<f2> "];
node3[label = "<f0> |<f1> F|<f2> "];
node4[label = "<f0> |<f1> R|<f2> "];
node5[label = "<f0> |<f1> H|<f2> "];
node6[label = "<f0> |<f1> Y|<f2> "];
node7[label = "<f0> |<f1> A|<f2> "];
node8[label = "<f0> |<f1> C|<f2> "];
"node0":f2 -> "node4":f1;
"node0":f0 -> "node1":f1;
"node1":f0 -> "node2":f1;
"node1":f2 -> "node3":f1;
"node2":f2 -> "node8":f1;
"node2":f0 -> "node7":f1;
"node4":f2 -> "node6":f1;
"node4":f0 -> "node5":f1;
}
现打开终端,输入命令:
[my@localhost ~]$dot -Tjpeg demo.dot -o demo.jpeg
-Tjpeg表示输出图片格式为jpeg格式,demo.dot为输入的源代码文件名,-o demo.jpeg表示输出的图片名为demo.jpeg。
node0[label = "<f0> |<f1> G|<f2> "];
又如:
main -> init [style=dotted]
graphviz对象在源代码中是如何体现的呢?我们来看下面的源代码:
digraph G { /*表示要画一个名为g的无向图*/
size ="4,4"; /*图象g 的属性size="4,4",即图象大小为4inch×4inch。*/
main [shape=box]; /* 表示main节点,据有属性shape=box,即长方形外形。 */
main -> parse [weight=8]; /*main节点与parse节点之间用箭头连起来,且由main指向parse。实际上也就是
建立了边对象,且边对象属性weight=8,句宽度为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"];/*node是关键字,表示为下面的所有节点的属性赋值*/
execute -> compare;
}
graphviz读入以上源代码,并开始逐字扫描分析程序。由上面的解释(/**/和//用于graphviz的注释),可以用于知道图象对象是整个源代 码,node1之类的是节点,而用->连着的两个节点是边对象(如main -> cleanup)。graphviz中三种对象各自的对象属性较多,详细的情况请参考graphviz的帮助文档,当然你不用害怕,常用的就那么几个。关 于dot语法这次暂就介绍这么多吧,从上,你可看出dot语法很好理解的吧。完整的语法学习参考graphviz的帮助文档。
再来几张图片看看graphviz能做什么?:
- 用graphviz绘出特殊图形
- 可视化图形软件 Graphviz
- 用数字出图形
- calltree+graphviz 绘出项目函数调用图
- Graphviz -图形可视化,python实现
- Canvas globalAlpha绘出透明图形
- 思科ACI-图形化小工具-Graphviz
- 结构化图形绘制利器Graphviz
- Emacs graphviz图形中使用latex
- 用graphviz画图
- 用Graphviz来画图
- GraphViz
- Graphviz
- Graphviz
- Graphviz
- Graphviz
- Graphviz
- 特殊的数学图形
- 保存数据库中其他对象不变,删除数据库中所有数据的实现方法
- Java NIO API详解
- div+css布局漫谈
- 浅析SQL SERVER一个没有公开的存储过程
- Java线程模型缺陷研究
- 用graphviz绘出特殊图形
- 为什么System.Data.DataRow类实例化时没有构造?
- 在Lomboz中配置Tomcat数据库连接池
- 自己做了个移动查话费的东西,大家可以下来用!
- 北京风险投资商联系资料
- Fedora Core 5 安装后的快速配置
- Oriacle8i 与 MS SQL Sever 之比较
- 原则
- 一个axis的例子