■sample23.gif
【要点】
(1)面グラフのクラス定義
GD::Graph::area; #折れ線グラフの領域でデータを表現する
#面グラフ。
$graph = GD::Graph::area->new(600, 400);
(2)凡例を設定する
$graph->set_legend(@legend); #凡例の値を配列で取っています
#凡例の位置はデフォルトの'BC' (下の中央揃え)です。
(3)面の色を決める
'dclrs' => [qw (lblue lyellow blue yellow lgreen lred
green red purple orange pink dyellow) ],
(4)軸の線を描く、描かない、を制御する
long_ticks => 1, #true(=1)の場合、目盛りの線を軸いっぱいに描きます。
#デフォルトは0です。
#long_ticksが0の場合、tick_length
#の値で描かれます。
#tick_lengthのデフォルトは4です。
'long_ticks' => 1, #上記参照。
'tick_length' => 0, #上記参照。
'x_ticks' => 0, # 1:trueならば、X軸に目盛が描かれます。
#long_ticksとtick_lengthの値により描かれます。
# 0:X軸に目盛を描かない。
(5)面の描き方
cumulate => 2, # 1:データセットは互いの上に積み重なります(積み上げ)。(2は誤り?)
# 棒グラフ、面グラフのみサポート。overwriteも参照して下さい。
(6)Y軸目盛の値を編集する
y_number_format => '%d', # '%d'は、Perl sprintfの引数です。
(7)目盛の値の位置
'y_plot_values' => 1, #Y軸の目盛の値が軸の脇際に描かれます。
'x_plot_values' => 1, #X軸の目盛の値が軸の脇際に描かれます。
#デフォルトは何れも1です。
(8)X軸ラベルの表示方法
'x_labels_vertical'=> 1, #X軸ラベルが垂直に表示されます。長い文字列の場合用いる。
(9)Y軸の値が0の軸を描く(Y軸の0の位置をはっきりさせる場合)
zero_axis => 1, # 1:Yの値が0の軸が描かれます。
# 0:デフォルト。
(10)凡例の列数を決める
'lg_cols' => 7, #下に置いた凡例が長すぎる場合、凡例の列数を指定出来ます。
#デフォルトは、自動計算されます。
|
|
■sample23.pl
chdir("C:\\Inetpub\\wwwroot\\uriage"); #カレントディレクトリ指定(IISの場合)
use lib 'C:/Inetpub/wwwroot/uriage'; #GD::Graphライブラリ格納フォルダ GD (固定)の場所
#
use GD::Graph::area;
require 'save.pl';
# CONTRIB Edwin Hildebrand.
#
# See changes in bars.pm: Check for bar height rounding errors when
# stacking bars.
print STDERR "Processing sample23\n";
@dat = qw(
991006 991007 991114 991117 991118 991119 991120
991121 991122 991123 991124 991125 991126 991127
991128 991129 991130 991201 991204 991205 991206
991207 991208
);
@sub = qw(0 0 0 0 0 0 0 0 1 1 1 1 2 3 1 1 1 1 2 2 6 8 8);
@def = qw(0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0);
@rej = qw(0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0);
@opn = qw(4 4 4 5 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3);
@ass = qw(0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0);
@wrk = qw(1 2 2 2 2 2 1 1 2 2 2 1 1 1 1 1 1 1 1 1 3 6 5);
@fin = qw(0 0 0 0 0 0 1 0 0 0 0 1 1 1 2 2 2 2 2 2 2 2 2);
@ver = qw(0 0 0 0 0 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1);
@con = qw(0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0);
@tst = qw(0 0 0 0 0 0 0 0 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1);
@rev = qw(0 0 0 0 0 0 0 0 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1);
@cco = qw(0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0);
@cls = qw(0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 1 0 0 0 0);
@sld = qw(0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 2 2 3 3 3 4);
# setup x data
push(@data,\@dat); # push x labels into plot data
push(@data,\@sub);
push(@data,\@def);
push(@data,\@rej);
push(@data,\@opn);
push(@data,\@ass); # push x values into plot data
push(@data,\@wrk); # (push order must match legend label order)
push(@data,\@fin);
push(@data,\@ver);
push(@data,\@con);
push(@data,\@tst);
push(@data,\@rev);
push(@data,\@cco);
push(@data,\@cls);
push(@data,\@sld);
# setup legend labels
@legend = qw(
Submitted Deferred Rejected Opened Assigned Work
Finished Verified Configured Tested Reviewed
Closed-CO Closed Sealed
);
# get graph object
$graph = GD::Graph::area->new(600, 400);
# set graph legend
$graph->set_legend(@legend);
# set graph options
$graph->set(
'dclrs' => [ qw(lblue lyellow blue yellow lgreen lred
green red purple orange pink dyellow) ],
'title' => "States by Time",
'x_label' => "Time",
'y_label' => "# OF thingies",
'long_ticks' => 1,
'tick_length' => 0,
'x_ticks' => 0,
'x_label_position' => .5,
'y_label_position' => .5,
'cumulate' => 2,
'bgclr' => 'white',
'transparent' => 0,
'y_tick_number' => 5,
'y_number_format' => '%d',
#'y_max_value' => 25,
#'y_min_value' => 0,
'y_plot_values' => 1,
'x_plot_values' => 1,
'x_labels_vertical'=> 1,
'zero_axis' => 1,
'lg_cols' => 7,
'accent_treshold' => 100_000,
);
$graph->plot(\@data);
save_chart($graph, 'sample23');
(参考)
●本ソースコードの1〜3行目(挿入)
1 chdir("C:\Inetpub\wwwroot\uriage"); #カレントディレクトリ指定(IISの場合)
2 use lib 'C:/Inetpub/wwwroot/uriage'; #GD::Graphライブラリ格納フォルダ GD (固定)の場所
3 #
Windows IIS 走行用に元ソースに挿入
●>save.pl(グラフ画像保存ルーチン)
|