top

TOP  RSS  Login

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 を行う際、以下のライブラリがあればそれぞれのライブラリに応じた機能が有効になる。

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_labelX 軸、Y 軸のラベル文字
long_ticks, {x,y}_long_ticks目盛りを伸ばす
tick_length, {x,y}_tick_length目盛りの長さ
x_ticksX 軸の目盛りを表示する
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_offsetx_label_skip が設定されているとき、初めの目盛りを描く位置
x_all_ticksX 軸の全ての目盛りを描く
x_label_position, y_label_position軸のラベルの位置(0 (原点) から 1 の値)
x_labels_verticalX 軸の目盛りの値を縦に表示する
x_plot_values, y_plot_values目盛りと共に値を表示する
box_axisグラフを上下左右閉じる
no_axes軸を表示しない(bar グラフの場合、undef では全て表示されるが 0 では X 軸のみ表示される)
two_axesY 軸を左右に表示するグラフを利用する(y_label の代わりに y1_label, y2_label の設定が必要)
use_axistwo_axes を設定した際にそれぞれのデータグループで用いられる Y 軸の配列リファレンス
zero_axisY 軸の 0 の値を示す軸を常に表示する
zero_axis_onlyY 軸の 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

duD

0.218599