Perl(Active Perl5.6)GDでグラフを作成する-GDGraph

2008.7.12 修正-2004.12 初版
INDEX;
1.アプリケーションの構成
2.システム構成(環境)
3.Perl、DG等のインストールインストール詳細
4.グラフの作成方法
5.出力画面等(結果)
6.APダウンロード(表2テスト環境全ファイル)
7.GD-Graphグラフサンプル(全37例)
8.GD-Graphマニュアル
 変更履歴


TARGET;
・GD::Graphでグラフを描く
・グラフのタイトル等を日本語で表示する
・グラフのY軸の目盛数字を\付き,(カンマ)区切りに編集する
・グラフの軸のデータマーク(▲/●等のマーク)を表示する
・グラフをGIF画像で表示する
・グラフをEXCELに出力する
・OSはWindows

本ページは、OS Windows IIS + Active Perl5.6.1をベースに書いています。Perl5.8ベースについてはこちらをご覧ください-2008.7.12 。

1.アプリケージョンの構成

  サンプルアプリケージョンの構成は、以下のとおりです。

    
図1 AP構成

(説明)

 (1)*1 入力データ
    ・年月(MByyyy,MBmm)
    ・営業地域名(MBarea)
    ・処理区分(MBproc=list)
     直接、売上管理表を起動するURL;
     http://127.0.0.1/uriage/uriage-area.asp?MBarea=新宿&MByyyy=2004&MBmm=11&MBproc=list(ローカルサーバ)
 (2)*2 グラフの表示方法例(uriage-srea.asp内)
     <img src='graph-tantosya.cgi?gext="&Gext&"&graf="&・・・'>
         実例;
         graph-tantosya.cgi?gext=png&graf=./tmp/1/PJGRAPH-1-200411&mant=新宿テーブル&dbt=担当者別売上状況&aid=1&
         aname=新宿&Gm=6,7,8,9,10,11,END&Gy=2004,2004,2004,2004,2004,2004,END

 (3)*3 EXCELの作成方法例(uriage-srea.asp内)
表1 EXCELの作成方法例(Web形式)

sub excelout()
  'ファイル名=担当者別売上管理表-mm月分-20041122.xls
  ymd = Date()
  tmp = Split(ymd,"/")
  ymd = tmp(0) & tmp(1) & tmp(2) 'yymmdd
  outfilename = Reportname & "-" & MBmm & "月分-" & ymd & ".xls"
  'Response.Buffer=true
  Response.ContentType = "application/vnd.ms-excel"
  'Response.AddHeader "Content-Disposition","inline; filename=" & outfilename
  Response.AddHeader "Content-Disposition","attachment; filename=" & outfilename
  response.write "<HTML><HEAD></HEAD><meta http-equiv=""Content-Type"" content=""text/html; charset=Shift_JIS""><BODY>"&chr(13)
  response.write strall '出力内容はstrallにある
  if uriagetotal <> 0 then 'グラフをEXCEL上にハイパーリンクする
  graftmp=graphpath & Grafile & "."& Gext
  response.write "<br><img src='" & graftmp & "'>"
  end if
  response.write "</BODY></HTML>"
End sub
     
   <meta http-equiv=""Content-Type"" content=""text/html; charset=Shift_JIS"">を入れないと、文字化けが起きる。    EXCELは、Web形式で出力されます。必要に応じローカルでブック形式に変換します。  (4)*4 データベース     ・種類:マイクロソフトアクセスMDB     ・ドライバー:Microsoft Access Driver(*.mdb)     ・DNS名:uriagedb(任意)     ・DBファイル名:売上管理台帳.mdb(任意)     ・使用テーブル:担当者別売上状況、営業統括地域テーブル、新宿テーブル  (5)サンプルアプリケーション売上管理表ファイル構成(図1の「TOPメニュー」のソースはありません)
表2 ファイル構成 [ ]:フォルダ (AP):作成アプリケーション

[uriage] (テスト環境パス C:\Inetpub\wwwroot\uriage)
+-[DB]
   +---売上管理台帳.mdb	
+-[GD]
   +---[Graph] ←GD::Graphモジュール。右参照。
   +---[samples](未使用)
   +---[t](未使用)
   +---[Text] ←GD::Textモジュール。右参照。
   +---CHANGES(未使用)
   +---Dustismo.LICENSE(未使用)
   +---Dustismo_Sans.ttf(未使用)
   +---Graph.pm ←GD::Graphメイン
   +---Makefile.PL(未使用)
   +---MANIFEST(未使用)
   +---README(未使用)
   +---rgb.txt ←GD::Graph::colourで用いるユーザ定義カラー
   +---Text.pm ←GD::Textメイン
+-img
+-[tmp]
   +-[1] ←1は、新宿の地域コード。ここにグラフファイルを保存します。
      +---PJGRAPH-1-200411.gif
      +---PJGRAPH-1-200411.png
+-graph-tantosya.cgi ←グラフ作成CGI(AP)
+-graph-test.cgi   ←テスト用グラフ作成CGI(AP)
+-graphSave.pl    ←グラフファイル保存ライブラリ(AP)
+-howtograph.html   ←本HTML(AP)
+-perlgd-install.html ←インストール方法HTML(AP)
+-uriage-area.asp   ←売上管理表作成ASP(AP)
[Graph] GD::Graphモジュール
 +---area.pm
 +---axestype.pm
 +---bars.pm
 +---colour.pm
 +---Data.pm
 +---Error.pm
 +---FAQ.pod
 +---hbars.pm
 +---lines.pm
 +---linespoints.pm
 +---mixed.pm
 +---pie.pm
 +---points.pm
 +---utils.pm

[Text] GD::Textモジュール
 +---Align.pm
 +---Wrap.pm
 

2.システム構成(環境)

  
表3 システム構成
OS/サーバー・Windows2000 Server(本番)
・Windows2000Pro+IIS5(TEST環境)
・Windows98SE+PWS(TEST環境)
Windows XP+IIS5では、未確認です。
必要ソフト
(サーバ)
・Active Perl(5.6.1)
・GD(2.16)
・GD::Graph(1.43) GDTextUtil(0.86)
・jcode.pm(0.87)
()内の数字はバージョン
クライアント・InternetExplorler5.5以上
・Microsoft Access 2000以上(DB作成用)
※ GD(2.16):
  Author:LDS [ Lincoln D. Stein ] 
  Link:http://cpan.uwinnipeg.ca/module/GD
※ GD::Graph(1.43)、GDTextUtil(0.86):
  Author:MVERB [ Martien Verbruggen ]
  Link:http://cpan.uwinnipeg.ca/module/GD::Graph
   
 

3.Perl、DG等のインストール

  Active Perl(5.6.1)のバージョンにより、インストール(ダウンロード)するPerlモジュールやライブラリ   のGDやGD::Graphのバージョンが必然的に決まってきます。それぞれのバージョンは、表3のとおりです。   いわゆる"Perl 5.6 repository"(リポジトリ:収納庫の意)の GDやGD::Graphをインストールします。   PerlモジュールやライブラリをWindowsにインストールする場合、PPM(Perl Package Manager)で行ないます。   インストール方法として、「オンラインで行なう場合」と「Perlモジュールをダウンロードした後ローカルで場合」   がありますが、「オンラインで行なう場合」は、PCがProxy経由の場合は、制約が出てきます。   私の場合は、Perlモジュールをダウンロードした後ローカルで行ないました。   Perlモジュール等をインストールする場合、PPM形式のファイルをダウンロードする必要があります。    GDの場合、 http://cpan.uwinnipeg.ca/module/GD (ActiveState default Perl 5.6 repository [2.06])    → http://ppm.activestate.com/PPMPackages/zips/6xx-builds-only/ から、GD.zipファイルをダウンロードし、 GD2.06のインストールを行なったが、GDの実際のバージョンが1.27であったため、日本語が表示できなかった。   このため、GDのバージョンを上げるため、    http://cpan.uwinnipeg.ca/module/GD (www.bnbes.org Perl 5.6 repository [2.16] )→ http://www.bribes.org/perl/ppm/    → http://www.bribes.org/perl/ppm/GD-2.16-PPM56.tar.gz からGD2.16(GD-2.16-PPM56.tar.gz)をダウンロードしました。   (注.GDは頻繁にバージョンアップされます。下のPPMがダウンロードできない場合は、
http://www.bribes.org/perl/ppm/     から、最新バージョンをダウンロードします。)    最新GDは、GD-2.35-PPM56.tar.gz 24-Aug-2006 09:55 435kからダウンロードします。   しかし、また問題が発生しました。GD-2.16-PPM56.tar.gzには、ローカルインストールに必要なPPDファイルがありませんでした。   このような場合、GD2.06のPPDファイルをGD2.16用に修正し、インストールを行ないます。   しかし、またまた問題が発生しました。Perlバージョンが同じ 5.6 にもかかわらず、以下のエラーが出て   インストールできないマシンが出てきました。それは、本番マシンです。TEST環境マシンは問題なくインストールできています。     Error installing package 'GD': Read a PPD for 'GD', but it is not intended for t     his build of Perl (MSWin32-x86-multi-thread)   止むを得ず、本番マシンには、旧バージョンGD2.06のインストール時のリストを基に、GD2.16(GD-2.16-PPM56.tar.gz)   のモジュールでPerlフォルダを差し替えました。(Windows用は、バイナリ形式のため問題ないようです。)       GD::Graphの場合、http://ppm.activestate.com/PPMPackages/zips/6xx-builds-only/ から      http://ppm.activestate.com/PPMPackages/zips/6xx-builds-only/GDGraph.zip (ppm形式)      http://ppm.activestate.com/PPMPackages/zips/6xx-builds-only/GDTextUtil.zip (ppm形式)   をダウンロードし、インストールしようとしたが、GDTextUtil.zip(GD::Text用)の中に、Windows用のPPMファイル   がありませんでした(一般的にMSWin32-x86-multi-threadフォルダ内にある)。インストールの順番はGD→GD::Text→GD::Graphです。   GD::Textがインストールできないため、GDグラフは私用ライブラリーとして使用することにしました。   私用ライブラリー用のファイルは、別のサイト(下記URL)からダウンロードしました。    ・GD::Graph⇒ http://search.cpan.org/~mverb/GDGraph-1.43/    ・GD::Text ⇒ http://search.cpan.org/~mverb/GDTextUtil-0.86/    >インストール方法詳細(Perl、GD、GD::Graph、Jcode.pmのインストール方法)
ActivePerl用GD関連モジュールのPPMとPPDをダウンロードするための入り口サイト
インストールの順番 モジュール名 PPM,PPDをダウンロードするためのサイトのページ 備考
1 GD ・http://cpan.uwinnipeg.ca/module/GD
2 GDTextUtil ・http://cpan.uwinnipeg.ca/dist/GDTextUtil
3 GDGraph ・http://cpan.uwinnipeg.ca/module/GD::Graph
 

4.グラフの作成方法

  GD::Graphモジュールを用いたグラフの作成方法について、テスト用アプリケーション(graph-test.cgi)で説明します。   グラフの作成の作成に当り、河馬屋二千年堂のGD::Graphモジュールの
日本翻訳を参考及び一部引用させて頂きました。   このソースの出力グラフは、ここを参照。   (作成方法概要)    (1)作成するグラフのクラスを定義します      ・例.       use GD::Graph::linespoints; #折れ線+点グラフ(例1,2共通)       use GD::Graph::Data; #データセットのカプセル化(例2の場合)    (2)X軸の項目名とデータセットの無名配列(配列の配列)を作成します      ・例1.一般的な使用(無名配列)      @data = ( #※データセット変数名の使い方に注意 ["4","5","6","7","",""], #X軸の項目名(4,5,6,7,8,9月) [255000,260000,255000,230000,225000,330000], #Aさんの過去6ヶ月の売り上げデータ [125000,126000,125000,123000,122500,123000], #Bさんの過去6ヶ月の売り上げデータ [95000,86000,50004,13000,92500,63000] #Cさんの過去6ヶ月の売り上げデータ );      ・例2.GD::Graph::Dataオブジェクト使用(無名配列を更に[ ]で括る)      $data = GD::Graph::Data->new ([ #※データセット変数名の使い方に注意 ["4","5","6","7","",""], #X軸の項目名(4,5,6,7,8,9月) [255000,260000,255000,230000,225000,330000], #Aさんの過去6ヶ月の売り上げデータ [125000,126000,125000,123000,122500,123000], #Bさんの過去6ヶ月の売り上げデータ [95000,86000,50004,13000,92500,63000] #Cさんの過去6ヶ月の売り上げデータ       ] );    (3)作りたいグラフのGD::Graphオブジェクトを作成します      ・例      $graph = new GD::Graph::linespoints(400,300); #書き方1。()内は、グラフキャンバスの大きさ。width×height      graph = GD::Graph::linespoints -> new(400,300); #書き方2。()内は、グラフキャンバスの大きさ。width×height    (4)グラフオプションを指定します      ・例       $graph->set( x_label => "X ラベル", #X軸ラベルの文字 y_label => "Y ラベル", #Y軸ラベルの文字 y_max_value => 350000, #Y軸に表示される最大値 y_min_value => 0, #Y軸に表示される最小値 y_tick_number => 7, #Y軸の数 title => "タイトル", #表題 );    (5)グラフを出力(プロット)します      ・例1((2)例1の場合)※データセット変数名の使い方に注意 my $gra=$graph->plot(\@data);      ・例2((2)例2の場合)※データセット変数名の使い方に注意 my $gra=$graph->plot($data);    (6)ファイルに保存します       下表4-テスト用アプリケーションソースの「*6グラフ出力」参照。
表4 テスト用アプリケーションソース
 1 #! /usr/local/bin/perl
 2
 3 #テスト用折れ線グラフ-2004.12.16
 4 use jcode;                                       #jcode.pl PM版。UTF-8コード変換に使用
 5 chdir("C:\\Inetpub\\wwwroot\\uriage"); #カレントディレクトリ指定(IISの場合)
 6 require "graphSave.pl";                #グラフ画像ファイル保存ルーチン
 7 use lib 'C:/Inetpub/wwwroot/uriage';             #GD::Graphライブラリ格納フォルダ GD (固定)の場所
 8 use GD::Graph::linespoints;   #折れ線グラフ+点グラフを作成する場合。その他棒グラフ(bars)、点で表すグラフ(points)、円グラフ(pie)等*0
 9 #use GD::Graph::mixed;  #グラフを組み合わせた混合グラフ(円グラフ以外の組み合わせ)*0
10 use GD::Graph::colour;  #色の操作ルーチン
11 use GD::Text;           #GDのために用いるテキストユーティリティ*7
12 use GD::Text::Align;    #GD::Textのサブルーチン。位置づけられた文字列の描写。
13 $gd_text=GD::Text->new() or die GD::Text::error();  #GD::Textオブジェクト定義*7
14 $gd_text->font_path('C:/WINDOWS/FONTS');   #ラベル文字等用のTrue Fontのパス。最後に/は付けない。*7
15 GD::Graph::colour::read_rgb("./GD/rgb.txt"); #RBGユーザ定義ファイル(752色)の読み込み。デフォルトは限られた数の色(29色)です。
16 #グラフに書くテキスト文字の定義。※日本語を扱う場合、UTF-8への変換が必要です。変換しないと文字化けします!
17 $graphtitle="担当者別売上推移(月別)";     #グラフタイトル
18 Jcode::convert(\$graphtitle,'utf8',"sjis"); #グラフタイトルのUTF-8への変換
19 $tuki="月";                                 #X軸ラベル文字
20 Jcode::convert(\$tuki,'utf8',"sjis");       #X軸ラベル文字のUTF-8への変換
21 $en='売上金額(円)';                                 #Y軸ラベル文字
22 Jcode::convert(\$en,'utf8',"sjis");         #Y軸ラベル文字のUTF-8への変換
23 #データセット(表示データ)の定義(スタティックにとる場合)
24 #「X軸の項目名」と「データセット(グラフデータ)」が入った配列の配列(無名配列)を作成します。
25 #各配列のサイズは全て同じにします。
26 undef @data; #データセット用配列(無名配列にする)。
27 @data=(             #※実際は、データベースを読み、動的に無名配列を作成します!
28 ["4$tuki","5$tuki","6$tuki","7$tuki","8$tuki","9$tuki"], #X軸目盛の項目名(4,5,6,7,8,9月)※日本語表!(2005.1.13)
29 [255000,260000,255000,230000,225000,330000], #Aさんの過去6ヶ月の売り上げデータ。売上金額(円)。
30 [125000,126000,125000,123000,122500,123000], #Bさんの過去6ヶ月の売り上げデータ。売上金額(円)。
31 [95000,86000,50004,13000,92500,63000]        #Cさんの過去6ヶ月の売り上げデータ。売上金額(円)。
32 );
33 my @hanrei =("A","B","C"); #凡例(担当者名:Aさん,Bさん,Cさん)。日本語の表示可能。
34 $graph=new GD::Graph::linespoints(600,400); #GD::Graphグラフオブジェクトの定義*0。折れ線グラフ+点グラフ(2005.1.13修正)
35                                       #()内の数字は、グラフのキャンパスの幅(width)と高さheight)(pix値)。
36  #オプション設定
37 $graph->set_x_label_font('MSGOTHIC.ttc',18); #X軸ラベルフォントのTrue Fontファイル名のパスとFontの大きさ。先頭に/を付けない。*7
38 $graph->set_y_label_font('MSGOTHIC.ttc',18); #Y軸ラベルフォントのTrue Fontファイル名のパスとFontの大きさ。※16pix以下にすると表示がおかしくなる!
39 $graph->set_x_axis_font('MSGOTHIC.ttc', 18); #X軸の値のフォント(目盛)のTrue Fontファイル名のパスとFontの大きさ
40 $graph->set_y_axis_font('MSGOTHIC.ttc', 18); #Y軸の値のフォント(目盛)のTrue Fontファイル名のパスとFontの大きさ
41 $graph->set_title_font('MSGOTHIC.ttc',18);   #title表題のフォントのTrue Fontファイル名のパスとFontの大きさ
42 $graph->set_legend_font('MSGOTHIC.ttc',18);  #凡例のフォントのTrue Fontファイル名のパスとFontの大きさ
43 $graph->set_text_clr(green);                 #title,label,axis label/表題、ラベル、軸ラベルの色(凡例以外)
44 $graph->set_legend(@hanrei);                 #凡例の設定
45 $graph->set(
46     # dclrs        =>[ qw(blue red green) ], #棒、線、点(マーカー*5)、円グラフ扇形の色*1。@dataデータセットのデータの順に定義します。
47     # borderclrs   =>[ qw(blue red green) ], #棒グラフ境界線の色
48     #two_axes      =>1,                      #2つのデータセット(混合グラフ)を使用の場合(目盛):1
49     #types          =>['linespoints','linespoints','linespoints'],    #混合グラフグラフの種類lines:折れ線*2※typesを使用し線種を指定しないと軸ボックスが表示されない!(2005.1.13)
50     #line_types         =>[1,1,1],           #折れ線グラフグラフの種類 1:実線solid 2:ダッシュ(dashed) 3:点線(dotted) 4:点線(dot-dashed)
51     x_label        =>$tuki,       #X軸ラベルの文字
52     y_label        =>$en,         #Y軸ラベルの文字
53     x_label_position =>0,         #X軸ラベルの文字の位置。0〜1の値。0:左寄せ 1:右寄せ 1/2:中央 デフォルト:3/4
54     y_label_position =>0,         #Y軸ラベルの文字の位置。0〜1の値。0:下詰め 1:上詰め 1/2:中央 デフォルト:1/2
55     y_max_value      =>350000,    #Y軸に表示される最大値。1目盛の長さを決め自動計算する方法もあります*3。
56     y_min_value      =>0,         #Y軸に表示される最小値
57     y_tick_number    =>7,         #Y軸の目盛の数。1目盛の長さを決め自動計算する方法もあります*3。
58     #box_axis         =>1,        #軸を箱状にする(グラフの外枠を線で引く)。デフォルト:1。0の場合X軸とY軸の線のみ描かれます。
59     boxclr           =>'gainsboro', #グラフの背景色(Background),前景色(foreground)(軸とグリッド)等を指定します。
60     #bar_spacing     =>1,         #棒と棒との間を空間のピクセル数。
61     line_width       =>1,         #折れ線(lines)、点付折れ線(linespoints)グラフでの線の幅をピクセル値で。デフォルト: 1。 
62     transparent      =>0,         #trueが設定されると、作成されるイメージの背景色が透明になります。 (オプションbgclr もご覧ください) デフォルト:1。 
63     y_long_ticks     =>1,         #long_ticksがtrue:1ならば、Y軸目盛線が軸と同じ長さで描かれます。
64     x_ticks          =>1,         #x_ticksがtrue:1ならば、X軸目盛線がlong_tickstick_lengthの値で描かれます。
65     title            => $graphtitle,  #表題(title)
66     #logo            =>"./logo.png",  #ロゴ・ファイルの名前。
67     #logo_position   =>"UL",          #ロゴの大きさの倍率と、ロゴを画面のどこに置くかを指定します。
68     legend_placement =>"RC",          #凡例を置く場所。 2つの文字の組み合わせになります*4。
69     'y_number_format' => \&y_format   #Y軸目盛の値を編集する。例.\120,000(\付きカンマ区切り)。y_formatは、サブルーチン名。
70 );                                                                   # 'y_number_format'は、GD::Graphの予約語。
71 my $ext="gif";                           #作成画像の種類 gif/png*6
72 ###グラフ画像出力(ファイル出力)
73    $name="./tmp/sample2004";             #作成ファイル名のパス
74    my $gra=$graph->plot(\@data);         #グラフを描く(出力)。配列名@dataの前に\を付ける。
75    save_chart($graph, $name,$ext);       #グラフを保存する
76 ###グラフ画像出力(STDOUT:画面表示)。 依頼(起動)側は、<img>タグでコーディングします。
77    binmode (STDOUT);                     #標準出力(BINモード)
78    print "Content-type: image/$ext\n\n"; #ヘッダーの定義
79    print $gra->$ext;                     #グラフを出力。#グラフ画像出力(ファイル出力)がない場合はこの行コメント化する。
80    #print $graph->plot(\@data)->$gext;   #グラフ画像出力(ファイル出力)がない場合はこの行を生かす。配列名@dataの前に\を付ける。
81 #-----Y軸の数値を編集する--------サブルーチン-------------
82 sub y_format{
83         my $value = shift;
84         my $ret;
85         if ($value >= 0){
86             $ret = sprintf("\\%d", $value);
87         }
88         else{
89             $ret = sprintf("-\$\%d", abs($value) * $refit);
90         }
91         $ret =~ s/(\d{1,3})(?=(?:\d\d\d)+(?!\d))/$1,/g; #千円単位にカンマ区切り。Perlメモ- http://www.din.or.jp/~ohzaki/perl.htm (引用) 
92         return $ret;
93 }
94 #
*0:グラフの種類(グラフのクラス)   記述法:use GD::Graph::モジュール名   GD::Graph::lines:折れ線グラフ   GD::Graph::bars:棒グラフ(横棒グラフは、GD::Graph::hbars)   GD::Graph::points:データを点で表すグラフ   GD::Graph::linespoints:折れ線と点の組み合せグラフ   GD::Graph::area:データを折れ線グラフの領域でデータを表現するグラフ   GD::Graph::mixed:上記グラフを組み合わせた混合グラフ   GD::Graph::pie:円グラフを作成します。 *1:dclrsメソッド(サンプルではデフォルトを使用)   棒、線、点(マーカー)、円グラフの扇形の色を制御します。   デフォルト:[ qw(lred lgreen lblue lyellow lpurple cyan lorange) ]。(図2参照)   これは GD::Graph::colour で定義されている色(rgb.txt)のユーザ定義カラー名及びデフォルト色であること。   例.$graph->set( dclrs => [ qw(green pink blue cyan) ] );    データセット定義(@data)の配列(X軸の項目は除き)と対応します。    最初(1,5,9番目)のデータは緑(green)に、次(2,6,10番目)はピンク(pink)・・・となります。   (デフォルト色:GD::Graphが自ら定義する29色名)    white,lgray,gray,dgray,black,lblue,blue,dblue,gold,lyellow,yellow,dyellow,lgreen,green,dgreen,lred,red,dred,    lpurple,purple,dpurple,lorange,orange,pink,dpink,marine,cyan,lbrown,dbrown *2:types メソッド(混合グラフ)    グラフの種類を、データセット定義(@data)の配列(X軸の項目は除き)と同じ順番でもった指定する。    グラフの種類は、pie以外のモジュール名(*0参照) *3:Y軸目盛の自動計算    例.    #Y軸目盛の計算    undef @tmp;    $ymemorihaba=50000; #Y軸の1目盛の幅(例えば、5万円)    @tmp=sort {$b <=> $a} @alldata_list; #最大値を求める    $tick_no = int($tmp[0]/$ymemorihaba)+1; #Y軸の数    $y_max = $tick_no*$ymemorihaba; #Y軸の最大値 *4:legend_placementメソッド   表記形式:B[LCR]またはR[TCB]   デフォルト: 'BC' (=下の中央揃え)     最初の文字は位置(Bottom または Right)、2番目の文字はがどちらに寄せるかを記入。     2番目の文字は、Left(左寄せ)、 Right(右寄せ)、 Center(中央揃え)、 Top(上詰め)      Bottom(下詰め)を意味します。 *5:点グラフのマーカー(2005.1.13追記)   データセット用配列の順に配列で指定します。   マーカーには次のものがあります(右図参照)。    1: 塗りつぶされた四角(filled square)  2: 四角(open square)            3: 十字(horizontal cross)    4: 対角線の十字(diagnal cross)      5: 塗りつぶされた菱形(filled diamond)   6: 菱形(open diamond)    7: 塗りつぶされた丸(filled circle)   8: 丸(open circle)             9:横線(horizontal line)    10:縦線(virtical line) (図2参照)    デフォルトは、 [1,2,3,4,5,6,7,8] です。    $graph->set( markers => [1,2,3,4,5,6,7,8] ) データが9以上あった場合は、1,2,・・・と循環します。
*6:グラフ出力(2005.1.17追記)   グラフをファイルに出力するためにの拡張子(拡張子が関数です)は、つぎの方法があります。   @  明示的に指定→ファイル出力の例    my $ext="gif"; #gif 又は png を明示的に指定 又は my $ext= $graph->export_format    open(OUT, ">$name.$ext") or     die "Cannot open $name.$ext for write: $!";    binmode OUT;    print OUT $graph->plot(\@data)->$ext;    close OUT;   A 便利なexport_formatメソッドを使用(この場合、現在はgifとなる)→標準出力の例    my $ext= $graph->export_format #export_formatメソッドを使用 又は my $ext="gif";    binmode (STDOUT); #標準出力(BINモード)    print "Content-type: image/$ext\n\n"; #ヘッダーの定義    print $graph->plot(\@data)->$ext; *7:FONTパスの指定方法    use GD::Text; #GDのために用いるテキストユーティリティ    $gd_text=GD::Text->new() or die GD::Text::error(); #GD::Textオブジェクト定義    #フォント・パスfont_path設定     $gd_text->font_path('C:/WINDOWS/FONTS'); #Windowの場合、ドライブ名を含め絶対パスを指定します     $gd_text->font_path('/user/fonts'); #UNIXの場合、サーバ名以下の絶対パスを指定します    #set_font設定。フォント・パスを設定を行った場合、set_font関係はファイル名のみを指定します。     $graph->set_x_label_font('MSGOTHIC.ttc',18); #Xラベル     $graph->set_title_font('MSGOTHIC.ttc',18); #タイトル    #set_fontで絶対パスを指定する例(絶対パスで指定した場合、フォント・パスにない場合、set_fontが優先されます)     $graph->set_title_font('C:/Inetpub/wwwroot/gdgraph/fonts/dasaji_win.TTF',18); #タイトル ダサ字 Windows  

5.出力画面等(結果)

   この画面が表示されたときに、「EXCEL」ボタンをクリックするとExcelファイル(Webページ形式)をダウンロードします。
図2 出力画面等(結果)
 

6.APダウンロード(表2テスト環境全ファイル)

  ●ダウンロード(Free!)     
>Perlでグラフを作成するサンプルアプリケージョン(Perl、GD、jcode.pmは含まれていせん) GD::Graph,GD::Textは、私用ライブラリとして同梱されています。   ●起動方法    (URL:ローカルサーバの場合)       http://127.0.0.1/uriage/uriage-area.asp?MBarea=新宿&MByyyy=2004&MBmm=10&MBproc=list        ・MBarea:新宿 (新宿以外のデータはありません)        ・MByyyy:2004  (2004年度以外のデータはありません)        ・MBmm:10   (10月、11月のデータがあります)        ・MBproc:list (list固定)   ●留意事項    走行環境により以下のとおりソースを変更して下さい。    (1)graph-tantosya.cgi(グラフ作成CGI)       @27行目と172行目(カレントディレクトリ指定(IISの場合))         表4 テスト用アプリケーションソースの5行目を参照。       A173行目(GD::Graphライブラリ格納フォルダ GD (固定)の場所)         表4 テスト用アプリケーションソースの7行目を参照。       B181行目(ラベル文字等用のTrue Fontのパス)         表4 テスト用アプリケーションソースの14行目を参照。    (2)uriage-area.asp(売上管理表作成ASP)       @48行目(pngまたはgifに変更する)         48 Gext="png" 'サーバ保存グラフファイルの拡張子(.なし)       A73行目(グラフファイル保存用パス)         73 graphpath="http://127.0.0.1/uriage/tmp" 'グラフパス 環境により修正必須*********           (注)tmpフォルダ内には、1(半角1)のフォルダが必要です。1:新宿の地域コード。  
 

7.GD-Graphグラフサンプル(37例)

このサンプルグラフは、GD-GraphのダウンロードファイルGDGraph-1.43.tar.gzに同梱されているサンプルAPを
走行(Windows)し作成したものです。したがい、グラフのタイトルや軸ラベルは英語です。
サンプルグラフ名をクリックすると、グラフ、説明とソースコード(*.pl)がご覧になれます。
GD-Graphグラフサンプル一覧
Noサンプルグラフ名サンプルAP(*.pl)内 容ポイント
1sample11.gifsample11.plA Simple Bar Chart(グラフタイトル。以下同様)
縦棒グラフのクラス定義;GD::Graph::bars
・データセット配列のアプセル化
・グラフの棒に影を付ける
2sample11-h.gifsample11.plA Simple Bar Chart
横棒グラフのクラス定義;GD::Graph::hbars
・同上
3sample12.gifsample12.plTwo data sets
棒グラフ(縦)。
・Y軸目盛の描き方 ・グラフの棒に影を付ける
・2本バー
4sample12-h.gifsample12.plTwo data sets
棒グラフ(横)。
・同上
5sample13.gifsample13.plBars in front of each other
棒グラフ(縦)。
・グラフの棒の並べ方
・グラフの棒に影を付ける
・2本バー
6sample13-h.gifsample13.plBars in front of each other
棒グラフ(横)。
・同上
7sample14.gifsample14.plUsing two axes
棒グラフ(縦)
・データセット配列のアプセル化
・2つのY軸の描き方 (2本バー)
・グラフの背景等に色をつける
・グラフのキャンバスに余白を入れる
・グラフにロゴを貼り付ける(動作不良)
・グラフの値をデータポイントの上に描く
8sample14-h.gifsample14.plUsing two axes
棒グラフ(横)(Y軸2つ)。
・同上
9sample15.gifsample15.plStacked Bars (incremental)
棒グラフ(縦)。
・グラフの棒を積み重ねて描く
・グラフの棒に境界線を描く
・3本バー
10sample15-h.gifsample15.plStacked Bars (incremental)
棒グラフ(横)。
・同上
11sample16.gifsample16.plCredits and Debits
棒グラフ(縦)プラス、マイナスバー。
・Y軸目盛の描き方
・凡例の位置を決める
・Y軸目盛の値を編集する
・X軸ラベルの位置を決める
12sample16-h.gifsample16.plCredits and Debits
棒グラフ(横)プラス、マイナスバー。
・同上
13sample17.gifsample17.plStacked Bars (incremental)
棒グラフ(縦)。積み上げバー。
・グラフの棒の描き方
・棒を色と境界線で飾る
14sample17-h.gifsample17.plStacked Bars (incremental)
棒グラフ(横)。積み上げバー。
・同上
15sample18.gifsample18.plStates by Time
棒グラフ(縦)。積み上げバー。
・グラフの棒を明示的に決める
・Y軸目盛を制御する
・X軸目盛を描かない
・軸ラベルの位置を決める
・棒の描き方
・グラフの背景の描き方
16sample18-h.gifsample18.plStates by Time
棒グラフ(横)。積み上げバー。
・同上
17sample21.gifsample21.plAn Area Graph
面グラフのクラス定義;GD::Graph::area
18sample22.gifsample22.plAn Area Graph
エリアグラフ(プラス面、マイナス面表示)
・2つのY軸を使用する
・Y軸の値が0の軸を描く(マイナスデータあり)
19sample23.gifsample23.plStates by Time
No15のエリアグラフ
・凡例を配列で設定する
・面グラフの面に色を付ける
・グラフの軸線を制御する
・面の描き方
・Y軸目盛の値を編集する方
・X軸ラベルを垂直に描く
・凡例の列数を決める
20sample31.gifsample31.plA Points Graph
点グラフのクラス定義;GD::Graph::points
・点(マーカ)の長さを決める
・マーカのデータセットとの対応を決める
・マーカの種類
21sample41.gifsample41.plA Lines and Points Graph
折れ線グラフ+点グラフ
・Y軸目盛の描き方
・折れ線の連続、不連続を制御する
22sample42.gifsample42.plA Lines and Points Graph, reading a CSV file
折れ線+点グラフのクラス定義;
GD::Graph::linespoints
・データセットファイルから設定する方法
CSV(Sample42.dat)
23sample51.gifsample51.plA Simple Line Graph
折れ線グラフのクラス定義;GD::Graph::lines
・グラフの軸の外枠線を描く描かないを決める
24sample52.gifsample52.plA Simple Line Graph
折れ線グラフ
・Y軸目盛の描き方
・Y軸が0の軸を明らかにする(マイナスデータあり)
・グラフのプロットエリアを箱状にする
・軸ラベルの位置を決める
・X軸目盛を3つ毎に表示する
25sample53.gifsample53.plA Multiple Line Graph
複数ライン折れ線グラフ。
・ユーザ定義カラーリストを使用する
・Y軸目盛を描く
・軸の目盛線を制御する
・Yが0の軸線を制御する(マイナスデータあり)
・折れ線の色を明示的に描く
・データの値をデータポイントに表示する
26sample54.gifsample54.plNumerical X axis
折れ線グラフを滑らかに描
(データは、ファイル読込み)
・データセットをファイルから読み込む方法データ(Sample54.dat)
・Y軸目盛の描き方
・X軸の目盛の値をデータセットから自動計算する
・プロットエリアの外枠を箱状にしない
・X軸ラベルの値を垂直に表示する
27sample55.gifsample55.plSine and Cosine
サイン、コサイン曲線−折れ線グラフ
・X、Y軸の目盛値をデータセットから自動計算する
28sample56.gifsample56.plNumerical X axis
折れ線グラフを滑らかに描
(データは、ファイル読込み)
・データセットをファイルから読み込む(Sample54.dat)
29sample57.gifsample57.plTest of two_axes min/max calculation
2つのY軸を持つ折れ線グラフ
・2つのY軸の描き方
・Y軸目盛をデータセットから自動計算する
30sample61.gifsample61.plA Mixed Type Graph
混合グラフのクラス定義;GD::Graph::mixed
混合グラフの種類
(lines bars points area linespoints)
(折れ線、棒、点、面、折れ線+点)
・グラフの種類はtypesパラメータで指定する
・混合グラフのグラフの種類を設定する
・Y軸目盛の描き方
・目盛の値を描かない方
31sample62.gifsample62.plA Mixed Type Graph with Two Axes
2つのY軸を持つ混合グラフ(bars lines)
・Y軸目盛の描き方
32sample63.gifsample63.plEmulation of error bars
混合グラフ(bars bars lines)
・Y軸目盛の描き方
・棒の描き方
・グラフの種類の設定
・背景色や境界線を描く
33sample71.gifsample71.plMixed Type and TTF
混合グラフ
・混合グラフの種類を設定する
・Y軸目盛の描き方
・軸目盛の値を描く描かないを指定する
・X軸ラベルを垂直に表示する
・TTFを指定する(ダサ字を指定)
34sample91.gifsample91.plA Pie Chart
円グラフのクラス定義;GD::Graph::pie
・円グラフのラベルを描く
・円グラフの色や厚みを指定する
・グラフキャンバスに余白を取る
・最初のデータの書き出し角度を指定する
・グラフを3Dで描く
35sample92.gifsample92.plA Pie Chart
円グラフ。TTF指定。
・円グラフの背景や外枠の色を指定する
・TTFを指定する(ダサ字を指定)
36sample93.gifsample93.pl無題 non title
円グラフ。データソート。
・最初のデータの描き出し角度を決める
・3Dで描かない指定
・ラベルを描く描かないを制御する
37sample94.gifsample94.plA Pie Chart
円グラフ。高さ指定(立体)。
・(X軸または)円グラフの扇型に表示するラベルの色を指定する
・グラフの厚みを決める
(走行環境) ・Windows2000Pro+IIS5  ・Active Perl(5.6.1)  ・GD(2.16)  ・GD::Graph(1.43)  ・GDTextUtil(0.86)

 

8.GD-Graphマニュアル

 次のサイトを参照ください。


TOP

(サイト内グラフ関連リンク)
NoタイトルGDと必要ソフトスクリプトOS
1 Perl(Active Perl5.6)GDでグラフを作成する ・Active Perl(5.6.1)
・GD(2.16)
・GD::Graph(1.43)
・GDTextUtil(0.86)
・jcode.pm(0.87)
Perl CGIWindows IIS
2 PHPで高機能なグラフ生成ライブラリーJpGraphを使ってグラフを描いてみました・・・ ・PHP(4.3.11)
・GD(2.0)(boutell)
・JpGraph(1.17)
PHPWindows IIS
3 簡単!HTMLで、XML/SWFライブラリーを用いてフラッシュグラフを作成する−フラッシュグラフ作成1(HTML基本編) ・XML/SWF Chartsライブラリー
HTML,Perl,PHPWindows IIS等
4 簡単!HTMLで、amChartsライブラリーを用いてフラッシュグラフを作成する ・amChartsライブラリー
HTML,Perl,PHPWindows IIS等

HOME Profile BBS Chat Game Center GD Graph PDF Make PDF Make ASP Apli Make MID FONT IE Filter Mini Bonsai Web Color List E-m@il

(変更履歴)
2005.07.22  ・GDの2.25へのバージョンアップによる追記
2005.02.12  ・グラフサンプル全37例に新たに説明を追記しました
2005.01.17  ・グラフサンプル全37例追加
 ・グラフ作成概要追記
2005.01.13 GD::Graphの使用クラスを実態に合わせ、mixed(混合)→linespoints(折れ線+点グラフ)に変更
(mixedは、pie円グラフ以外を包含しているので動作は問題ない)
 ・GD::Graph::mixed;をコメント化し、GD::Graph::linespoint;を追加
 ・$graph=new GD::Graph::linespoints(600,400); mixed→linespointsに変更
 ・混合グラフ関係、types, box_axis をコメント化
 ・関連コメントの削除マーク
 ・点グラフのマーカーについて追記
 ・X軸の項目名が日本語表示出来なかったのをできるよう修正(バグ)
2004.12.24初版クリスマス版

最終更新日:2006.12.9