自从写了一个关于Graphviz 的教程 以来,我一直觉得它使用起来还不够方便。最近终于找到Graphviz 的Ruby 扩展了——ruby-graphviz 。
首先你得安装Graphviz ,记得装在默认目录下,不然ruby-graphviz 找不到(我还不知道怎么设置PATH,请指教)。
然后,gem 一下:
接下来将见证神奇的一刻。
Run 一下,你会在源文件所在目录下发现一个hello_world.png 文件。
老规矩,下面来解释一下。
可以用new 创建一个graph 对象。new 的时候有这么几个选项:
- :output : Output format (Constants::FORMATS) (default : dot)
- :file : Output file name (default : none)
- :use : Program to use (Constants::PROGRAMS) (default : dot)
- :path : Program PATH
- :parent : Parent graph (default : none)
- :type : Graph type (Constants::GRAPHTYPE) (default : digraph)
用output (有个别名save)生成图像。同样,output 也有几个可选项:
- :output : Output format (Constants::FORMATS)
- :file : Output file name
- :use : Program to use (Constants::PROGRAMS)
- :path : Program PATH
点
用add_node 来加点。可以像这样来设置属性:
这样,n 将会是一个用<.7, .3, 1.0> 填充的box。
用node_count 来对点计数。
用[]= 来设置属性值:
边
用add_edge 加边。
用edge_count 来对边计数。
也可以像点那样设置属性:
这样,e 将成为一条带红色标注“an edge” 的蓝线。
Record Nodes
记录是一个盒子,被分割成横的或竖的格子。格子之前可以加标记,只需把标记放在尖括号<> 之间。横格子之间用竖杠| 隔开,竖格子就是外加一对大括号{}。看下面的例子:
再来看一个复杂一点的例子:
子图
代码说明一切(注意add_graph):
高级技巧
同一个图的三种不同写法:
Rubyist 更喜欢的风格:
Ruby geek 的写法:
小结
ruby-graphviz 和graphviz 的原生DOT 文件之间存在一一对应的关系。一个典型的graphviz DOT 文件有三个主要部分:
- 数据头,用来设置点、边、图的属性
- 点定义
- 边定义
所以ruby-graphviz 文件也是由这三部分组成。我们用一个对比例子来结束本教程。
这个graphviz 例子来自Mark A. McBride:
我用Ruby 改写了这个例子:
要想了解更多,请看官方文档。