Pear::Image_Graph

Image_Graph 基本ファイル作成-2

それでは引き続き、Image_Graph 基本ファイル p_gra-54.php を作成します。
作成ファイル内容は、
63Pear Village に戻り
左サイドナビ「Pear::Image_Graph」の中の
Image_Graph 基本 PHP ファイル
から見てください。

表示データ作成

Pear が好きな factory( ) メソッドを使用して表示データ作成をします。
この dataset Factory method は 表示データ $Dataset[0] objects を作成します。
$Dataset[0] = Image_Graph::factory('dataset');
このなかに、addPoint( )メソッド
書式は addPoint(X 軸の値, Y 軸の値) を使用して、例えば 1月 の総売上予測値(予測-1)が 10 百万円とすれば、
$Dataset[0]->addPoint('1', 10);
のように設定します。
同様に 2~6 月の予測-1 を以下のように設定します。
$Dataset[0]->addPoint('2', 13);
$Dataset[0]->addPoint('3', 20);
$Dataset[0]->addPoint('4', 15);
$Dataset[0]->addPoint('5', 12);
$Dataset[0]->addPoint('6', 18);
そして、凡例の名前を setName('**') メソッドを使用して
$Dataset[0]->setName('予測-1');
のように設定します。

グラフ表示

設定したデ-タを表示します。
書式は、
$Plot = $Plotarea->addNew('****', array($Dataset));
です。
addNew( ) メソッド使用して、グラフ欄 $Plotarea に表示デ-タ値を設定し、$Plot オブジェクトを作成すれば完成です。
'****' のところをいろいろ変えることで出力されるグラフが変わります。
例) line,area,bar,pie,radar,step,impulse, dot,scatter,smooth_line,smooty_area
よって、
$Plot = $Plotarea->addNew('line', array($Dataset));
とすれば折線が描けるはずです。
$Plot = $Plotarea->addNew('smooth_line', array($Dataset));
とすればなめらかな曲線の折線が描けるはずです。
でもうまくいかないのです。
どうも、PHP-5.2 まではできていたようなのですが、PHP-5.3 以降はできなくなってしまったようです。
要するに大きなバグがあるのです。
だからみなさん Pear::Image_Graph を使用しないのです。
というよりは使えないのです。
仕方がないので、今回は
$Plot = $Plotarea->addNew('area', array($Dataset[0]));
とします。
'area' を使用すると折線の上部と下部に色付きの領域が作成されます。
何も設定しないと上部は黒、下部は白になります。
そこで、この上部領域を透明にして白に見せかけ、あたかも折線を描いたかのようにします。
透明にする方法については、
Image_Graph 基本ファイル作成
の「背景色設定」のところで説明しています。
ここを参照してください。
そして、setLineColor('色') メソッドで境界線(折線)の色を今回は赤に設定します。
$Plot->setLineColor('red');

第二の折線グラフの表示

1~6 月の主力製品売上予測値(予測-2)を設定していきます。
表示データ $Dataset[1] objects を作成します。
$Dataset[1] = Image_Graph::factory('dataset');
総売上予測値(予測-1)と同様に、単位は百万円とし、
$Dataset[1]->addPoint('1', 5);
$Dataset[1]->addPoint('2', 4;
$Dataset[1]->addPoint('3', 8);
$Dataset[1]->addPoint('4', 10);
$Dataset[1]->addPoint('5', 9);
$Dataset[1]->addPoint('6', 5);
$Dataset[1]->setName('予測-2');
のように設定し、
$Plot = $Plotarea->addNew('area', array($Dataset[1]));
$Plot->setLineColor('black');
今度は折線の色を黒にしました。

余計な折線の消去

'area' グラフを描いているための弊害がもう一つあります。
1月の 0 の位置から 10 の位置
6月の 18 の位置から 0 の位置
にも縦線が引かれてしまうのです。
この余計な線を消去します。
白線で上書きします。
まず、この白線の表示デ-タをセットします。
$Dataset[2] = Image_Graph::factory('dataset');
$Dataset[2]->addPoint('1', 22);
$Dataset[2]->addPoint('6', 22);
ちなみに、22 はY 軸の最大値です。
凡例の名前は空白とします。
$Dataset[2]->setName(' ');
縦線を描くには 'impulse' を使用します。
$Plot = $Plotarea->addNew('impulse', array($Dataset[2]));
線の色は白にします。
$Plot->setLineColor('white');
これで余計な折線を消すことができました。

縦線グラフの表示

次ぎに1~6 月の総売上実績値(実績-1)を設定していきます。
総売上予測値(予測-1)と同様に、単位は百万円とし、
$Dataset[3] = Image_Graph::factory('dataset');
$Dataset[3]->addPoint('1', 12);
$Dataset[3]->addPoint('2', 11);
$Dataset[3]->addPoint('3', 19);
$Dataset[3]->addPoint('4', 14);
$Dataset[3]->addPoint('5', 15);
$Dataset[3]->addPoint('6', 14);
$Dataset[3]->setName('実績-1');
のように設定し、縦線ですので 'impulse' を使用します。
$Plot = $Plotarea->addNew('impulse', array($Dataset[3]));
$Plot->setLineColor('red');
予測-1 赤に対する実績-1 ですのでは縦線の色を赤にしました。

棒グラフの表示

1~6 月の主力売上実績値(実績-2)を設定していきます。
まずは、棒グラフの表示デ-タをセットします。
$Dataset[4] = Image_Graph::factory('dataset');
$Dataset[4]->addPoint('1', 5);
$Dataset[4]->addPoint('2', 3);
$Dataset[4]->addPoint('3', 9);
$Dataset[4]->addPoint('4', 7.5);
$Dataset[4]->addPoint('5', 8);
$Dataset[4]->addPoint('6', 4);
$Dataset[4]->setName('実績-2');
のように設定し、棒グラフですので 'bar' を使用します。
$Plot = $Plotarea->addNew('bar', array($Dataset[4]));
$Plot->setLineColor('black');
予測-2 黒に対する実績-2 ですのでは棒グラフの外形線の色を黒にしました。
つきに、棒グラフの内部を黒にします。
addColor('色') メソッドで $fillColor オブジェクトを黒にします。
$fillColor については、
Image_Graph 基本ファイル作成
の「棒グラフを描くための準備」のところで説明しています。
ここを参照してください。
$fillColor->addColor('black');
そして $Plot オブジェクトに棒グラフの内部色を設定します。
$Plot->setFillStyle($fillColor);
後一息、棒グラフの間隔を設定します。
setSpacing( ) メソッドで設定します。
引数は棒グラフ間の間隔です。
目盛表示エリアを除く横幅を棒グラフの数で割ったものより小さな値を設定します。
今回の場合で計算すると
(全体横幅-20)÷棒グラフの数
=(400-44)÷6
=59.333
=59 ・・・・ 小数点以下切捨
これが棒グラフの幅が最も細くなる値です。
これを越える値を設定することはできません。
0 を設定すると棒グラフ間の間隔は 0 となり階段状に表示されます。
今回は棒グラフの幅が最小となるように
$Plot->setSpacing(59);
としました。

グリッドの設定

グリッドの設定は、グラフが描き終わった後実行してください。
グラフが 'area' で作成されているので、グリッドを先に描いてしまうとグラフの下になって見えなくなってしまいます。
困ったものです。
X 軸のグリッドを作成してみます。
書式は、
$GridX = $Plotarea -> addNew('line_grid', null,IMAGE_GRAPH_AXIS_X);
です。
addNew( ) メソッド使用して、グラフ欄 $Plotarea にグリッド仕様を設定し $GridX オブジェクトを作成します。
第2引数は、null のダミ-、なんでもいいようです
第3引数は、X 軸なら IMAGE_GRAPH_AXIS_X
を設定します。
そして、setLineColor('色')メソッドを使用して
$GridX->setLineColor('gray@0.3');
とすれば灰色半透明の X 軸グリッドが完成します。
今回は X 軸ではなくY 軸にグリッドを設定します。
$GridY = $Plotarea -> addNew('line_grid', null, IMAGE_GRAPH_AXIS_Y);
$GridY->setLineColor('gray@0.3');

プロトエリアのパディング

左、上、右、下 の余白指定はそれぞれ
setAxisPadding('余白量 px', '上下右左')
メソッドを使用してプロトエリアに設定します。
$Plotarea->setAxisPadding(20, 'left');
$Plotarea->setAxisPadding(10, 'top');
$Plotarea->setAxisPadding(10, 'right');
$Plotarea->setAxisPadding(10, 'bottom');
今回は使用しません。

できたグラフ画像を出力

ただ単に画面に出力したいならば、done() メソッドを使用して
$Graph->done();
で終わりです。
今回は、一旦画像ファイルを img フォルダに保存してから表示します。
フォルダ名とファイル名を $filename に設定し、
$filename = 'img/p_gra-540.png';
$Graph->done(array('filename' => $filename));
とし、IMG タグを出力すれば ok です。
echo "<img src = 'img/p_gra-540.png'>";

引き続き、もう少しファイルサイズを小さくした Image_Graph 汎用ファイルについて説明します。 


Image_Graph 汎用ファイル作成 に進む
Image_Graph 基本ファイル作成-1 に戻る

63Pear Villageに戻る