分享

用DOT语言写关系图

 guitarhua 2013-11-04

一种定义图元关系的描述语言。DOT脚本文件非常简洁易读,也可以通过开源工具GraphViz来生成图像文件如bmp, png等。另外也有专门渲染DOT脚本的浏览器xdot。

看一个简单例子:

graph s {

     C_0 -- H_0 ;
     C_0 -- H_1 ;
     C_0 -- H_2 ;
     C_0 -- C_1 ;
     C_1 -- H_3 ;
     C_1 -- H_4 ;
     C_1 -- H_5 ;
 }

把以上内容保存为文本文件a.dot, 然后执行dot -Tpng -oa.png a.dot,就生成a.png如下:

 

这是一个分子式。DOT语言是不是很简单? 还有一些语法可以给每个图元,每条边设置颜色,形状,标签,位置等各种属性。这些语法也同样非常简洁,看下面的例子你就懂了:

digraph s {
     node [shape=ellipse, style=filled, color="#40e0d0"];
     edge [color="#606060", penwidth=3];
     main [color=green];
     main -> init [color=blue, label="hello, I'm \llable of edge"];
     main -> mainloop ;
     main -> exit ;
     init -> a_init ;
     init -> b_init ;
     init -> c_init ;
     mainloop -> select ;
 }

生成打图如下:

 

这个是有向图(directional graph), 脚本的第一个词需要换成"digraph"。常用的属性有color, style, shape, penwidth, label等。label中\r, \l, \n都表示换行,但对齐方式分别是右对齐,左对齐,居中。

DOT语言的相关文档:

http://www./Documentation.php
http://www./Documentation/dotguide.pdf

由DOT脚本生成图片的工具叫GraphViz, 包括一序列小工具。dot就是其中一个。

DOT 浏览器叫xdot, 直接在窗口渲染,不需要生成图像文件,强烈推荐。

很多图都比较适合用DOT来定义,比如流程图,组织关系图,类图,状态转换图等等。

在刚接触DOT不到3天的时间里,我就分别在代码性能优化,协议栈状态机定义两件事情用到了DOT,感觉非常方便。

性能优化:gprof可以对一个程序运行时进行profiling,生成报告,包括函数调用关系,每个函数被调用的次数,花费的时间。但这个报告是文本的,不够直观。可以通过一个gprof2dot.py脚本,把gprof的输出翻译成一个DOT文件,然后再用GraphViz转成图片或者直接用xdot来查看。

协议状态机: 我现在项目中的任务是实现LTE MAC层。周末刚知道了DOT,周一就需要定义LTE MAC的状态转换图,正好派上用场。

好东西一定要分享,于是花了半小时写了这个介绍。如果你通过这篇文章学会了DOT, 喜欢上了DOT,用上了DOT, 一定要来我这里注册一下哦。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多