Download
Rdoc (0.5.0)
What’s this?
GraphvizR is graphviz adapter for Ruby, and it can:
- generate a graphviz dot file,
- generate an image file by means of utilizing graphviz,
- interprete rdot file and generate an image file,
- and, generate a graph image file in rails application as a rails plugin.
How to install
gem install graphviz_r
Additionaly, if you want to use this in rails:
script/plugin install http://technohippy.net/svn/repos/graphviz_r/trunk/vendor/plugins/rdot
How to use
Generate a dot string
code 1.
gvr = GraphvizR.new 'sample'
gvr.graph [:label => 'example', :size => '1.5, 2.5']
gvr.beta [:shape => :box]
gvr.alpha >> gvr.beta
(gvr.beta >> gvr.delta) [:label => 'label1']
gvr.delta >> gvr.gamma
gvr.to_dot
result 1.
digraph sample {
graph [label = "example", size = "1.5, 2.5"];
beta [shape = box];
alpha -> beta;
beta -> delta [label = "label1"];
delta -> gamma;
}
code 2.
gvr = GraphvizR.new 'sample'
gvr.graph [:size => '1.5, 2.5']
gvr.node [:shape => :record]
gvr.node1 [:label => "<p_left> left|<p_center>center|<p_right> right"]
gvr.node2 [:label => "left|center|right"]
gvr.node1 >> gvr.node2
gvr.node1(:p_left) >> gvr.node2
gvr.node2 >> gvr.node1(:p_center)
(gvr.node2 >> gvr.node1(:p_right)) [:label => 'record']
gvr.to_dot
result 2.
digraph sample {
graph [size = "1.5, 2.5"];
node [shape = record];
node1 [label = "<p_left> left|<p_center>center|<p_right> right"];
node2 [label = "left|center|right"];
node1 -> node2;
node1:p_left -> node2;
node2 -> node1:p_center;
node2 -> node1:p_right [label = "record"];
}
code 3.
gvr = GraphvizR.new 'sample'
gvr.cluster0 do |c0|
c0.graph [:color => :blue, :label => 'area 0', :style => :bold]
c0.a >> c0.b
c0.a >> c0.c
end
gvr.cluster1 do |c1|
c1.graph [:fillcolor => '#cc9966', :label => 'area 1', :style => :filled]
c1.d >> c1.e
c1.d >> c1.f
end
(gvr.a >> gvr.f) [:lhead => :cluster1, :ltail => :cluster0]
gvr.b >> gvr.d
(gvr.c >> gvr.d) [:ltail => :cluster0]
(gvr.c >> gvr.f) [:lhead => :cluster1]
gvr.to_dot
result 3.
digraph sample {
subgraph cluster0 {
graph [color = blue, label ="area 0", style = bold];
a -> b;
a -> c;
}
subgraph cluster1 {
graph [fillcolor = "#cc9966", label = "area 1", style = filled];
d -> e;
d -> f;
}
a -> f [lhead = cluster1, ltail = cluster0];
b -> d;
c -> d [ltail = cluster0];
c -> f [lhead = cluster1];
}
Generate an image file
code
gvr = GraphvizR.new 'sample'
gvr.graph [:label => 'example', :size => '1.5, 2.5']
gvr.beta [:shape => :box]
gvr.alpha >> gvr.beta
(gvr.beta >> gvr.delta) [:label => 'label1']
gvr.delta >> gvr.gamma
gvr.output ## not use `to_dot' but `output'
result
Interprete rdot file
rdot file is evaluated in context of GraphvizR instance.
record.rdot
graph [:size => '1.5, 2.5']
node [:shape => :record]
node1 [:label => "<p_left> left|<p_center>center|<p_right> right"]
node2 [:label => "left|center|right"]
node1 >> node2
node1(:p_left) >> node2
node2 >> node1(:p_center)
(node2 >> node1(:p_right)) [:label => 'record']
command
$ ./bin/graphviz_r record.rdot
result
On Rails
use render :rdot in controller
class RdotGenController < ApplicationController
def index
render :rdot do
graph [:size => '1.5, 2.5']
node [:shape => :record]
node1 [:label => "<p_left> left|<p_center>center|<p_right> right"]
node2 [:label => "left|center|right"]
node1 >> node2
node1(:p_left) >> node2
node2 >> node1(:p_center)
(node2 >> node1(:p_right)) [:label => 'record']
end
end
end
use rdot view template
class RdotGenController < ApplicationController
def index
@label1 = "<p_left> left|<p_center>center|<p_right> right"
@label2 = "left|center|right"
end
end
# view/rdot_gen/index.rdot
graph [:size => '1.5, 2.5']
node [:shape => :record]
node1 [:label => @label1]
node2 [:label => @label2]
node1 >> node2
node1(:p_left) >> node2
node2 >> node1(:p_center)
(node2 >> node1(:p_right)) [:label => 'record']
Other useful information
You can direct a node not only by method but also as a hash key. It is more useful when you need to create nodes dynamicaly in your code.
In short,
gvr.b >> gvr.d
means
gvr[:b] >> gvr[:d]
