Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2316287
  • 博文数量: 252
  • 博客积分: 5472
  • 博客等级: 大校
  • 技术积分: 3107
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-17 18:39
文章分类

全部博文(252)

文章存档

2012年(96)

2011年(156)

分类: 项目管理

2012-03-12 16:24:58

1. Graphviz介绍

    Graphviz是大名鼎鼎的贝尔实验室的几位牛人开发的一个画图工具。

它的理念和一般的“所见即所得”的画图工具不一样,是“所想即所得”。

Graphviz提供了dot语言来编写绘图脚本。什么?!画个图也需要一个语言!!

不要急,dot语言是非常简单地,只要看了下面几个列子,就能使用了。

 

2. Graphviz的几个例子

    下面的几个例子都来自于官方文档。详情请见:.

2.1 Fancy graph

  1. digraph G{
  2. size = "4, 4";//图片大小
  3. main[shape=box];/*形状*/
  4. main->parse;
  5. parse->execute;
  6. main->init[style = dotted];//虚线
  7. main->cleanup;
  8. execute->{make_string; printf}//连接两个
  9. init->make_string;
  10. edge[color = red]; // 连接线的颜色
  11. main->printf[style=bold, label="100 times"];//线的 label
  12. make_string[label = "make a\nstring"]// \n, 这个node的label,注意和上一行的区别
  13. node[shape = box, style = filled, color = ".7.3 1.0"];//一个node的属性
  14. execute->compare;
  15. }

从上面的代码可以看出,dot语言非常简单,就是一个纯描述性的语言而已。

大家可以把上面的代码和下图中的连接对应起来看。

                                       1

                                              <图1. Fancy graph>

 

2.2 Polygon graph

下面是对应的图片:

                                          polygon

                                       <图2. Polygon graph>

2.3 连接点的方向

     我们可以用“n”,”ne”,”e”,””se”, “sw”,”w”,”nw”,

分别表示冲哪一个方向连接这个节点(图形)-“north, northeast……”

如:


  1. digraph G{
  2. //b->c[tailport = se];
  3. b->c:se;
  4. }

                                         se

                                           <图3. Se graph>

 

2.4 数据结构图

    数据结构图是我们很容易用到的一类图形,一个简单地数据结构图代码如下:

  1. digraph g{
  2. node [shape = record,height=.1//我定义了我下面的样式;
  3. node0[label = " | G| "];
  4. //我是一个node,我有三个属性,第二个的名字为G,其他两个为空
  5. node1[label = " | E| "];
  6. node2[label = " | B| "];
  7. node3[label = " | F| "];
  8. node4[label = " | R| "];
  9. node5[label = " | H| "];
  10. node6[label = " | Y| "];
  11. node7[label = " | A| "];
  12. node8[label = " | C| "];
  13. "node0": f2->"node4":f1;
  14. //我的第三个属性连到node4的第二个属性
  15. "node0": f0->"node1":f1;
  16. "node1": f0->"node2":f1;
  17. "node1": f2->"node3":f1;
  18. "node2": f2->"node8":f1;
  19. "node2": f0->"node7":f1;
  20. "node4": f2->"node6":f1;
  21. "node4": f0->"node5":f1;
  22. }

                                data

                                               <图4. Data graph>

2.5 Hash table graph

这是一个简单地哈希表,如下图所示

                                             Hash

                                                          <图5. Hash table graph>

 

 

2.6 Process grahp

下面画一个轻量级的流程图。

  1. digraph g {
  2. subgraph cluster0 {
  3. //我是一个子图,subgraph定义了我,
  4. node[style = filled, color = white];
  5. //我之内的节点都是这种样式
  6. style = filled;
  7. //我的样式是填充
  8. color = lightgrey;
  9. //我的颜色
  10. a0->a1->a2->a3;
  11. label = "prcess #1"
  12. //我的标题
  13. }
  14. subgraph cluster1 {
  15. //我也是一个子图
  16. node[style = filled];
  17. b0->b1->b2->b3;
  18. label = "process #2";
  19. color = blue;
  20. }
  21. //定义完毕之后,下面还是连接了
  22. start->a0;
  23. start->b0;
  24. a1->b3;
  25. b2->a3;
  26. a3->end;
  27. b3->end;
  28. start[shape=Mdiamond];
  29. end[shape=Msquare];
  30. }

结果输出图形如下:

                                             Process

                                                <图6. Hash table graph>

 

3. 小结

    相信这几个列子下来,各位看官对graphviz也有了了解了吧,我个人用了一遍下来发现太爽了。

而对于dot语言,作为一个描述性的语言就非常简单了, 只要有编程基础的人,模仿几个列子下来

应该就能应用了。

    各位看官,有没有心动啊。

阅读(4666) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~