Pear::Image_Graph その4

Image_Graph 問題点対処ファイル作成

それでは、Image_Graph 問題点対処ファイル p_gra-62-xtype-3.php を作成します。
作成ファイル内容は、
63Pear Village に戻り
左サイドナビ「Pear::Image_Graph その4」の中の
Image_Graph 問題点対処 PHP ファイル
から見てください。

初期設定

例として、折線A~Cの3本のクロスする折線グラフを描きます。
まずは初期設定をします。 グラフ作成にまず必要になるのが、Image_Graph クラスですのでこれを読み込みます。
include 'Image/Graph.php';
次ぎに折線の各データを多重配列にします。


  //データ 多重連想配列
  $data = array(
   array(10,13,20,15,12,18),//折線A
   array( 5, 4, 8,10,17, 5),//折線B
   array( 8, 6,10,12, 8, 7),//折線C
   array( 0, 0,  0, 0,0, 0),
   //グリッド用
  );
  $data_era =
   array(22, 0, 0, 0, 0,22);//消線
  // X軸ラベル
  $x = 
   array('1','2','3','4','5','6');
  // 線色
  $c = array(
   'red','black','green','gray');

データ多重連想配列で折線A~Cの Y 軸の値を配列 $data に設定しました。
そして、折線の立上り及び立下り部分は描かれてしまう余分な線分を消すための消線のデ-タを 配列 $data_era に設定します。
次ぎに、X 軸の値を配列 $x に設定します。
最後に、折線A~Cの色を配列 $c に設定します。
折線Aは赤、折線Bは黒、折線Cは緑色になります。
折線の色は必ず異なる色を指定してください。
最後の色は灰色を指定してください。

余計な折線消去準備

'area' グラフを描いているための弊害があります。
X 軸 1 上の 0 の位置から10 の位置
X 軸 6 上の18 の位置から 0 の位置
にも縦線が引かれてしまうのです。
この余計な線を消去します。
白線で上書きします。
ここで、この白線の表示デ-タをセットします。
$Data_era = Image_Graph::factory('dataset');
for ($k=0;$k < count($x); $k++) {
  $Data_era -> addPoint($x[$k],$data_era[$k]);
}
これはあとで利用します。

グラフキャンパス作成

折線A~Cとグリッドのための4個のグラフキャンパス $Graph[0]~$Graph[3] を作成します。
for 文を利用します。
count($c) は 4 ですから
for ($i=0;$i < count($c);$i++) { }
とすると $i は 0,1,2,3 と変化します。
Image_Graph オブジェクトを作成します。
これによりキャンパスの骨格ができ上がります。
Pear が好きな factory( ) メソッドを使用して骨格を作ります。
Factory method で Image_Graph objects を作成します。
( ) の中は、第一引数は 'graph'、第二引数でグラフのサイズ、そして、画像書式は省略しデフォルトで png を設定します。
$Graph[$i] = Image_Graph::factory('graph', array(400, 300));

フォントの設定

キャンバスのなかで使用するフォントを設定します。
今回は日本語を使用しないので必須ではないのですが、日本語を使うことも想定し日本語フォントを選びます。
C:\Windows\Fonts
の中にある日本語フォントはどれも
*****.ttc
でこれでは動かないようです。
そこで、フリ-の日本語フォントで、*.ttf のものを探して、これを利用します。
IPAフォント サイト
に行くと
IPAex明朝 (Ver.003.01)
ipaexm00301.zip(5.42MB)
をダウンロ-ドすることができますのでこれを解凍後 ipaexm.ttf を fonts フォルダに置きます。
XAMPP 環境で言うと
C:\xampp\htdocs\p_gra \fonts\ipaexm.ttf
となります。
そして、addNew( )メソッドを使用して
$Font[$i] = $Graph[$i] -> addNew('font', 'fonts/ipaexm');
.ttf は省略しました。
とし、グラフキャンパス $Graph[$i] に setFont( )メソッドでフォントを設定します。
$Graph[$i] -> setFont($Font[$i]);
なお PHP7 では、このフォント設定はできませんので、日本語は使用できません、英文字を使用します。

折線グラフ表示領域 $Plotarea の設定

add メソッドを使用してキャンパス $Graph[$i] の中に折線グラフ表示領域 $Plotarea[$i] を追加します。
$Plotarea[$i] = $Graph[$i] -> addNew('plotarea');
折線グラフ表示領域の背景色を白にします。
この白色は後で透明化しますので必ず設定します。
$Plotarea[$i] -> setFillColor('white');
引続き、縦軸 (Y軸) の最大値と最小値を決めます。
ここでは0~22としました。
$axis_y[$i] = $Plotarea[$i] -> getAxis('y');//縦軸
$axis_y[$i] -> forceMinimum(0);
$axis_y[$i] -> forceMaximum(22);

表示するデータの作成

factory( ) メソッドを使用して表示データ作成をします。
この dataset Factory method は 表示データ $Dataset[$i] のオブジェクトを作成します。
まずは折線Aの表示データ $Dataset[0] の objects を作成します。
$Dataset[$i] = Image_Graph::factory('dataset');
addPoint( )メソッドを使用して、表示データ $Dataset[$i] のオブジェクトに各ボイントデ-タを追加していきます。
例えば、折線Aの X 座標 $x[0] に対応する Y 座標は $data[0][0] となりますから、
for ($j=0;$j< count($x);$j++) {
$Dataset[$i] -> addPoint($x[$j],$data[$i][$j]);
}
となります。
そして、addNew( ) メソッド使用して、折線グラフ表示領域 $Plotarea に表示デ-タ値を設定し、$Plot オブジェクトを作成します。
$Plot[$i] = $Plotarea[$i] -> addNew ('area',array($Dataset[$i]));
この時、線の色も設定します。
$Plot[$i]->setLineColor($c[$i]);
これで、折線A~Cの表示データの設定は完了です。

余計な折線の消去

既に準備した $Data_era を利用して余計な折線を消去します。
$Plot[$i] = $Plotarea[$i]->addNew('impulse',array($Data_era));
$Plot[$i]->setLineColor('white');
線の色は白にします。
これで余計な折線を消すことができます。

グリッドの設定

グリッドの設定は、グラフが描き終わった後実行します。
グラフが 'area' で作成されているので、グリッドを先に描いてしまうとグラフの下になって見えなくなってしまいます。
困ったものです。
Y 軸のグリッドを作成します。
グリッドは $i=3 の時、すなわち $Graph[3] に作成します。
addNew( ) メソッド使用して、グラフ欄 $Plotarea にグリッド仕様を設定し $GridY オブジェクトを作成します。
第2引数は、null のダミ-、なんでもいいようです。
第3引数は、Y 軸なら IMAGE_GRAPH_AXIS_Y
を設定します。
if ($i == count($c)-1){
  $GridY[$i] = $Plotarea[$i] -> addNew('line_grid', null, IMAGE_GRAPH_AXIS_Y);
  $GridY[$i] -> setLineColor('gray@0.2');
}

できたグラフ画像を出力

今回は、一旦画像ファイルを img フォルダに保存します。
フォルダ名とファイル名を $filename に設定し、
$filename[$i] = 'img/'.$c[$i].'.png';
とします。
例えば $filename[0] は
$filename = 'img/red.png';
となります。
そして
$Graph[$i] -> done(array( 'filename' => $filename[$i],));
とすれば、$i = 0 ならば img フォルダに ファイル red.png が保存されます。
この時、
echo "<img src = $filename[$i]>";
と記述すれば、グラフ red.png を見ることができます。

引き続き、グラフ画像合成方法について説明していきます。


Image_Graph グラフ画像合成 に続く
Image_Graph 問題点対処概要 に戻る

63Pear Villageに戻る