Perl - GD::Graph
GD を使って Perl でグラフを作成するモジュール。色々と遊べる。
インストール
Windowsの場合
Perl が ActivePerl の Perl 5.10 であり、実行ファイルへのパスが環境変数 PATH に含まれていると前提。
ActivePerl 10xx Win32 PPM packages に置かれているパッケージを頂戴して、コマンドプロンプトから ppm を利用してインストールする。
C:\> ppm install http://cpan.uwinnipeg.ca/PPMPackages/10xx/GD.ppd C:\> ppm install http://cpan.uwinnipeg.ca/PPMPackages/10xx/GDGraph.ppd C:\> ppm install http://cpan.uwinnipeg.ca/PPMPackages/10xx/GDTextUtil.ppd
あるいは BdP - PPM Repository のパッケージを頂戴してもいい。
Cygwin で GD を利用する場合、以下に準ずる。
その他の場合
GD ライブラリ
まず GD ライブラリがインストールされていない場合、そのインストールが必要。http://www.libgd.org/Downloads からソースをダウンロードする。
./configure
を行う際、以下のライブラリがあればそれぞれのライブラリに応じた機能が有効になる。
- zlib - http://www.gzip.org/zlib/
- libpng - http://www.libpng.org/pub/png/
- FreeType 2.x - http://www.freetype.org/
- JPEG library - http://www.ijg.org/
- XPM - http://koala.ilog.fr/lehors/xpm.html
README.TXT によると、「少なくとも zlib と libpng はあった方が良く、また FreeType と Jpeg library があればなお良い」そう。
システムによっては、パッケージ管理システムによって提供されているかも知れない。Mac OS X 10.4 の場合、zlib はインストールされているが、その他は各自でインストールする必要がある。
必要な外部ライブラリをインストール後、GD をコンパイル、インストールする。
Perl モジュール - GD / GD::Graph / GD::TextUtil
cpan からインストール。
$ sudo cpan -i GD::Graph
だけで、依存するその他のモジュールも自動的にコンパイル、インストールされる。
使い方
グラフの種類
- GD::Graph::area - 面グラフ
- GD::Graph::bars - 棒グラフ
- GD::Graph::hbars - 横棒グラフ
- GD::Graph::lines - 線グラフ
- GD::Graph::linespoints - 線と点のグラフ
- GD::Graph::mixed - 混合グラフ
- GD::Graph::pie - 円グラフ
- GD::Graph::points - 点グラフ
簡単な例
GD::Graph::lines で折れ線グラフを作る。
use GD::Graph::lines; my @item = qw( 2005 2006 2007 2008 ); my @data = qw( 100 120 135 125 ); my $graph = GD::Graph::lines->new(500,500); my $img = $graph->plot([\@item, \@data])->png;
$img が PNG 画像のバイナリデータ。png を jpeg や gif に変えると、それぞれの形式の画像が得られる。
重要なのが plot()
に渡す引数で、"引数となる配列リファレンス"の先頭の配列リファレンスが、X 軸の値つまり項目名となり、それ以降の配列リファレンスがデータ値となる。
これだけでもグラフは描けるものの、少し味気ない。グラフの色や形などは、グラフオブジェクトに対して set()
することで設定できる。
ちょっとした例
use GD::Graph::linespoints; my $graph = GD::Graph::linespoints->new(640,480); my $dat = [ [qw( 日 月 火 水 木 金 土 )], [qw( 78 84 89 91 86 88 95 )], [qw( 51 59 63 67 56 43 45 )] ]; $graph->set_legend(qw( Aさん Bさん )); $graph->set_legend_font("mcp.ttf",10); $graph->set_x_axis_font("mcp.ttf",10); $graph->set_y_axis_font("mcp.ttf",10); $graph->set_title_font("mcp.ttf",14); $graph->set_x_label_font("mcp.ttf",10); $graph->set_y_label_font("mcp.ttf",10); $graph->set_values_font("mcp.ttf",8); $graph->set( title => "体重", r_margin => 5, t_margin => 5, l_margin => 5, b_margin => 5, bgclr => "#ffffff", boxclr => "#f7f7f7", labelclr => "#553333", valuesclr => "#662222", axislabelclr => "#553333", fgclr => "#888888", textclr => "#ff0000", x_label => "曜日", y_label => "(kg)", x_label_position => 1, y_label_position => 1, dclrs => [qw(#ee4444 #22bb22)], y_long_ticks => 1, show_values => 1, line_width => 2, y_min_value => 0, y_max_value => 100, y_tick_number => 10, transparent => 0, legendclr => "#222266", legend_placement => "BC", ); my $data = $graph->plot($dat)->png; my $size = length($data); binmode(STDOUT); print "Content-Type: image/png\r\n". "Content-Length: ${size}\r\n\r\n". $data;
設定値
new() で設定する項目
GD::Graph::*->new(width, height)
と、引数に幅と高さを指定する。set()
では設定できない。
グラフ形式に依らず共通の設定
title | グラフタイトル |
t_margin, b_margin, l_margin, r_margin | 余白 |
logo | ロゴ画像 |
logo_resize, logo_position | ロゴ画像の縮小率とグラフ画像における位置 |
transparent | グラフ画像の背景を透過 |
interlaced | インタレース |
色
bgclr | 背景色 |
fgclr | 軸とグリッドの色 |
boxclr | グラフ部分の背景色 |
accentclr | 輪郭の色 |
shadowclr | 影の色 |
labelclr | ラベル文字の色 |
axislabelclr | 軸のラベル文字の色 |
legendclr | 凡例の色 |
valuesclr | 値を示す文字の色 |
textclr | 上記以外の文字色 |
dclrs | グラフの色(配列リファレンス) |
borderclrs | 境界線の色(配列リファレンス) |
shadow_depth | 影の高さ |
cycle_clrs | グラフの色をデータ毎ではなく項目毎に分ける |
accent_treshold | 輪郭を描く棒幅のしきい値 |
軸に関する設定
GD::Graph::{bars,lines,points,linespoints,mixed,area} に適用される。
x_label, y_label | X 軸、Y 軸のラベル文字 |
long_ticks, {x,y}_long_ticks | 目盛りを伸ばす |
tick_length, {x,y}_tick_length | 目盛りの長さ |
x_ticks | X 軸の目盛りを表示する |
x_tick_number, y_tick_number | 軸の目盛りの数 |
x_number_format, y_number_format | 軸の目盛りの値表示に用いられるフォーマット("%02f"など)あるいはコードリファレンス |
y1_number_format, y2_number_format | 複数の Y 軸を持つグラフの場合のフォーマット(y_number_format に準ずる) |
x_label_skip, y_label_skip | 軸の目盛りを描く間隔 |
x_tick_offset | x_label_skip が設定されているとき、初めの目盛りを描く位置 |
x_all_ticks | X 軸の全ての目盛りを描く |
x_label_position, y_label_position | 軸のラベルの位置(0 (原点) から 1 の値) |
x_labels_vertical | X 軸の目盛りの値を縦に表示する |
x_plot_values, y_plot_values | 目盛りと共に値を表示する |
box_axis | グラフを上下左右閉じる |
no_axes | 軸を表示しない(bar グラフの場合、undef では全て表示されるが 0 では X 軸のみ表示される) |
two_axes | Y 軸を左右に表示するグラフを利用する(y_label の代わりに y1_label, y2_label の設定が必要) |
use_axis | two_axes を設定した際にそれぞれのデータグループで用いられる Y 軸の配列リファレンス |
zero_axis | Y 軸の 0 の値を示す軸を常に表示する |
zero_axis_only | Y 軸の 0 の値を軸として利用する |
{x,y}_{max,min}_value | 軸の最大値と最小値 |
axis_space | 軸と目盛りの値との空白幅 |
text_space | グラフタイトルや軸ラベルと軸との空白幅 |
cumulate | 積み上げグラフ |
overwrite | 他のデータのグラフで上書きする |
correct_width |
グラフ上に値を表示する為の設定
show_values | グラフ上に値を表示する |
values_vertical | 値を縦に表示する |
values_space | グラフと値との幅 |
values_format | 値の表示に用いられるフォーマット |
棒グラフ(bars)の設定
bar_width | 棒の幅 |
bar_spacing | 棒の間隔 |
bargroup_spacing | 項目毎の間隔 |
線グラフ(lines)の設定
line_types | データグループ毎の線の形式(1:実線 2:破線 3:点線 4:点破線)の配列リファレンス |
line_type_scale | 破線の間隔 |
line_width | 線幅 |
skip_undef | データが undef の場合に線を繋がない |
点グラフ(points)の設定
markers | 点の形式(1:四角 2:中抜き四角 3:十字 4:斜め十字 5:菱形 6:中抜き菱形 7:点 8:中抜き点 9:横線 10:縦線) |
marker_size | 点の大きさ |
混合(mixed)グラフの設定
types | それぞれのデータグループのグラフ形式を示す文字列(lines, bars...)の配列リファレンス |
default_type | デフォルトのグラフ形式 |
凡例の設定
メソッドで設定されるもの
set_legend(...) | 凡例の項目文字列の配列 |
set_legend_font(fontname, size) | 凡例を表示するフォント |
オプションとして設定されるもの
legend_placement | 凡例の表示位置("B[LCR]|R[TCB]"; B:下 L:左 T:上 R:右) |
legend_spacing | 凡例の項目文字とマーカーとの空白幅 |
legend_marker_width, legend_marker_height | マーカーの幅と高さ |
lg_cols | 凡例の行数 |
円グラフ(pie)の設定
3d | 立体表示 |
pie_height | 円グラフの高さ |
start_angle | 基点となる角度 |
suppress_angle | 項目値を表示する角度のしきい値 |
label | 円グラフの下に表示される項目文字 |
フォントの設定
my $graph = GD::Graph::lines->new; $graph->set_label_font( TTFフォントファイルへのパス , フォントサイズ );
などとしてフォントを設定する。 グラフに日本語文字を表示したい場合、スクリプトを UTF-8 で記述するか、文字列を Jcode などを利用して UTF-8 へ変換する必要がある。 フォントの設定に関するメソッドは以下の通り。
共通
- set_title_font
pie グラフ
- set_label_font
- set_value_font
軸を持つグラフ
- set_x_label_font
- set_y_label_font
- set_x_axis_font
- set_y_axis_font
- set_legend_font
- set_values_font
リンク
Last modified:2008/11/22 18:02:55
0.0793