Perl GraphViz Module

忘れないウチに。昨日の続き…というか、単に GraphViz Module の使い方についてメモを。

use strict;
use warnings;
use GraphViz;

my $g = GraphViz->new(layout=>"fdp");

$g->add_node( "hoge", shape=>'record', label=>"hoge|{<port0>h10|<port1>h2|<port2>h3}");
$g->add_node( "fuga", shape=>'record', label=>"fuga|{<port0>f1|<port1>f2|<port2>f3}");
$g->add_edge( "hoge", "fuga");
$g->add_edge( "hoge", "fuga", from_port=>0, to_port=>1 );
$g->add_edge( "fuga", "fuga", from_port=>0, to_port=>1 );
$g->add_edge( "fuga", "hoge", from_port=>2, to_port=>0 );
$g->add_node( "foo",  shape=>'record', label=>"foo|{{r01|r02|r03}|{r11|r12}|{r21}}");

$g->as_png("test.png");

これでこういうグラフがかける。

"shape => record" するときのポイントとか注意点とか。

  • label は "{}" でくくると縦/横が入れ替わる。"{}"が入れ子になっている場合は、順に縦書きになったり横書きになったりする。
  • add_edge method で port を使用するときは from_port/to_port で指定する。ただし、"port" というオフセットがついていて、"from_port => XX" とすると、 というポートを指定したことになる。

まあ、pod に書いてあるのだけれども。忘れそうなので。