PC館

イントラ実験室4の1

さて今回は?

今回のテーマはグラフ作成だ。「実験室 イントラ編3」でデータベースを作成したが,その結果は表出力だけ(サンプルだ)なのでアピールに欠けるところもある。やはりビジネスレポート(?)はグラフィカルに視覚に訴えるところが欲しい...という訳でデータベースの検索結果を基にグラフ化をおこなってみよう。

まずはシステム構成の再確認だ。

サーバーOSWinsows2000ServerなんのかんのいってもMicrosoftは偉大だ,簡単セットアップが嬉しいぞ(^^; それに全体的にはActiveDirectoryで構築されてるみたいだから他のOS入れると浮いてしまう(^^;;
Web
サービス
InternetInformationService
(IIS)
だっておまけで付いてるから(^^; まぁ,外部に公開しなけりゃセキュリティ云々も問題にはならないだろう
クライアントWindows2000
InternetExplorler
上の理由と同じだ(^^)
追加したソフトActivePerl実験室 イントラ編1」で組み込んであるぞ

グラフ作成ツールは?

サンプルグラフ

グラフ作成ツールにはどんなものがあるのだろう。javaの「JFreeChart」ってのもあったけど,どうもjavaは難しい(...と感じる)ため,あえなく挫折。そこで採用したのは「GD」と,そのサブモジュールである「GD::Graph」だ。こちらはPerlで動作するので今まで勉強してきたPerlの知識が使い回せるのがとっても嬉しい。

右のグラフが,GDGD::Graph)で作ったサンプルグラフだ。...えっ,これが見えない? その場合はブラウザを最新版にアップデートすることをおすすめするぞ。(画像フォーマットはPNGだ)

※継続してグラフ出力モジュールを探していたところ,PHPで動作する「JPGraph」ってのを発見。これはなかなか使えそうなので機会があれば別項にて紹介することにしよう。

インストール

とりあえず,ActivePerlをインストールしなけりゃね。(実験室 イントラ編1参照)
では,GD本体のセットアップを始めよう。ソースコードから環境を構築できるような優秀な人はhttp://www.cpan.org/からでも勝手に落としてもらって進めてもらおう。

...「んなもん,できるかい!」と,ネットサーフィンしていると...
あった,あった。http://theoryx5.uwinnipeg.ca/から簡単インストールできるWin32 ActivePerl用ppmパッケージがダウンロードできるじゃないか。

ここで一つ問題発生だ。「実験室 イントラ編1」でも書いたけど,ActivePerlのバージョンによってパッケージが別になってるものもあるんだがこれもそうなのか?どうやらActivePerlのバージョンによってリンク先が違うようだが中身はどうなんだろう? まぁ細かいことはおいておいて,ホームページ上でActivePerlのバージョン毎のGD.ppdの在処を確認したら,コマンドプロンプトからppmと入力し,以下を実行しよう。(ここではActivePerl8xx用とする)

c:¥>ppm
ppm>ppm install http://theoryx5.uwinnipeg.ca/ppms/gd.ppd

これで,GD本体のインストールは完了だ。引き続き同所にある「GDTextUtil.ppd」と「GDGraph.ppd」も同様にインストールをおこなおう。

使いかたは?

まずは,「c:\perl\html\index.html」のActivePerlマニュアルで確認しよう。とはいっても英語なので敷居が高いぞ(^^;
ん〜よくわからないなぁ。サンプルプログラムでも見てみよう。http://www.cpan.org/から「GDGraph-x.xx.tar.gz」(x.xxはバージョンNo.だ)を落としてみよう。これを解凍するとサンプルプログラムが含まれているぞ。そのサンプルを参考に作ったのが上の画像を出力するプログラム(sample.pl)だ。

use GD::Graph::mixed;

use GD::Text::Align;
GD::Text->font_path('c:/winnt/fonts');

use GD::Graph::colour;
GD::Graph::colour::read_rgb("rgb.txt");

@data=(
["3.10","4.15","5.10","6.01","7.01"],
[100,80,50,350,300],
[0.10,0.35,0.45,0.50,0.98]
);

$graph=new GD::Graph::mixed(300,200);
$graph->set_x_label_font('msgothic.ttc', 10);
$graph->set_y_label_font('msgothic.ttc', 10);
$graph->set_x_axis_font('msgothic.ttc', 10);
$graph->set_y_axis_font('msgothic.ttc', 10);
$graph->set_text_clr(black);
$graph->set(
    dclrs        =>[ qw(blue red) ],
    borderclrs   =>[ qw(blue red) ],
    two_axes     =>1,
    types        =>['bars','linespoints'],
    x_label      =>'日付',
    y1_label     =>'結果1',
    y2_label     =>'結果2',
    y1_max_value =>500,
    y2_max_value =>1,
    y_min_value  =>0,
    box_axis     =>1,
    boxclr       =>'ivory',
    bar_spacing  =>1,
    line_width   =>3,
    transparent  =>1,
);

$gd=$graph->plot(\@data);

open(IMG, '>sample.png');
binmode IMG;
print IMG $gd->png;
close(IMG);

一応,ポイントだけ説明していこうか。まず,

use GD::Text::Align;
GD::Text->font_path('c:/winnt/fonts');

だ。これを指定することで,グラフ中の文字をTrueTypeFontにする事が可能になるぞ。なんせデフォルトだと日本語は使用できないので是非とも必要な設定だ。当然,Path指定はフォントファイルのある位置にしないとダメだ(^^; そして,プログラム中にあるように「...._font」指定のところでフォント名を指定すればOKだ。

あっ,そうそう,グラフ中に日本語を使用する場合は文字コードをUTF-8にしてプログラムを保存しないと文字化けするぞ。

次は,

use GD::Graph::colour;
GD::Graph::colour::read_rgb("rgb.txt");

だな。ここで,カラー定義ファイル(rgb.txt)を読み込み指定している。デフォルトだと赤,青,緑...といった基本的な色しか使用できないので中間色を使った綺麗なグラフにしようと思ったら必須だ。ちなみに「rgb.txt」は上で落としてきたサンプルプログラムに含まれているのでそれを利用しよう。この色の設定は,「dclrs」や「borderclrs」といったパラメータで指定可能だ。詳細はマニュアルを読んでくれい(^^;

次が肝心のデータ指定だ。最初の配列はX軸,2個め以降はY軸のデータとなっている。

@data=(
["3.10","4.15","5.10","6.01","7.01"],
[100,80,50,350,300],
[0.10,0.35,0.45,0.50,0.98]
);

ここからがいよいよGraph本体の設定だ。

$graph=new GD::Graph::mixed(300,200);

この行でグラフを定義して,以降で各パラメータの指定だ。必要なパラメータの指定が終わったら,

$gd=$graph->plot(\@data);

で,プロットだ(まだこの段階では出力されない)。

open(IMG, '>sample.png');
binmode IMG;
print IMG $gd->png;
close(IMG);

最後にファイル出力してできあがり。
さて,いよいよCGIでのブラウザ出力へと進んでいくぞ。いざ後編