PEAR Image_Graph 覚え書き
このところ、仕事で PEAR の Image_Graph を使う機会が多かったので、覚え書き。
今回やりたかったことは、
- DBとの連携
- ランキングレポートのように、Y軸の上にいくに従って値が小さくなる
- グラフをファイルとして出力する
- グラフに背景を入れる
- グラフの線にアンチエイリアスをかける
- マーカーを付ける
- グリッド線を入れる
といったあたり。
<?php require_once 'Image/Graph.php'; require_once 'Image/Canvas.php'; // アンチエイリアスの設定(ただし、バンドル版のGDライブラリを使用していないと使えない) $Canvas =& Image_Canvas::factory('png', array( 'width'=>640, 'height'=>480, 'antialias' => 'native' ) ); $Graph =& Image_Graph::factory('graph', $Canvas ); // TrueType フォントの設定(うまくいかなかった) // $Font =& $Graph->addNew('font', 'Verdana'); // フォントサイズを 8 ピクセルに設定 // $Font->setSize(8); // $Graph->setFont($Font); // プロットエリアと凡例の設定 $Graph->add( Image_Graph::vertical( $Plotarea = Image_Graph::factory('plotarea'), $Legend = Image_Graph::factory('legend'), 95 // プロットエリアと凡例の割合を 95:5 に設定 ) ); $Legend->setPlotarea( $Plotarea ); // データセットを2つ用意 $Datasets["A"] =& Image_Graph::factory('dataset'); $Datasets["B"] =& Image_Graph::factory('dataset'); // // このあたりでデータベースの処理 // while ( $row = $res->fetchRow() ) { $Datasets["A"]->addPoint( $row["date"], $row["a"] ); $Datasets["B"]->addPoint( $row["date"], $row["b"] ); } // 線の太さの設定 $Line1 =& Image_Graph::factory("Image_Graph_Line_Solid", "red"); $Line1->setThickness(1); $Line2 =& Image_Graph::factory("Image_Graph_Line_Solid", "blue"); $Line2->setThickness(1); // マーカーの設定 $Marker1 =& Image_Graph::factory('Image_Graph_Marker_Box'); $Marker1->setSize(2); $Marker1->setLineColor('red'); $Marker1->setFillColor('red'); $Marker2 =& Image_Graph::factory('Image_Graph_Marker_Diamond'); $Marker2->setSize(3); $Marker2->setLineColor('blue'); $Marker2->setFillColor('blue'); $Plot1 =& $Plotarea->addNew('line', array(&$Datasets["A"])); $Plot1->setLineStyle( $Line1 ); $Plot1->setMarker( $Marker1 ); $Plot1->setTitle('A'); $Plot2 =& $Plotarea->addNew('line', array(&$Datasets["B"])); $Plot2->setLineStyle( $Line2 ); $Plot2->setMarker( $Marker2 ); $Plot2->setTitle('B'); // Y軸の設定 $AxisY =& $Plotarea->getAxis('y'); $AxisY->setInverted(true); // 上が最小値となるように設定 $AxisY->setTitle('Rank', 'vertical'); $AxisY->forceMaximum(500); // Y軸の最大値を設定 // X軸の設定 $AxisX =& $Plotarea->getAxis('x'); $AxisX->setAxisIntersection('max'); // Y軸とY軸の最大値で交わるように設定 $AxisX->setTitle('Date'); // グリッドの設定 $GridX =& $Plotarea->addNew('line_grid', null, IMAGE_GRAPH_AXIS_X); $GridX->setLineColor('gray@0.5'); $GridY =& $Plotarea->addNew('line_grid', null, IMAGE_GRAPH_AXIS_Y); $GridY->setLineColor('gray@0.5'); // プロットエリアのパディング $Plotarea->setAxisPadding(20, 'left'); $Plotarea->setAxisPadding(20, 'right'); // グラフ全体の背景に画像を合成する設定(使用できるのは JPEG 画像) $Graph->setBackGround(Image_Graph::factory('Image_Graph_Fill_Image','/foo/bar/graph-bg.jpg')); // プロット領域を塗りつぶしておく $Plot1->setBackGroundColor('white'); // 出力するファイル名の指定 $filename = '/foo/bar/graph/test.png'; // グラフの出力 $Graph->done( array( 'filename' => $filename, ) ); ?>