グラフサンプル (No.-19) グラフ名:面グラフ 画像名:sample23.gif CGI名:sample23.pl
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_tickstick_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(グラフ画像保存ルーチン)

最終更新日:2005.1.17