Image_Graphで円グラフ作ってみた。
PHPでグラフをつくるということで、作ってみた。
ググってみたけど、あんまりサンプルないし、日本語のマニュアルないので(有っても理解できないかもしれないけど・・・
なんかPEARでそういうライブラリがあったのでそれでやってみます。
- 外部ファイルとして置くのでファイルをDL
http://download.pear.php.net/package/Image_Graph-0.7.2.tgz
http://download.pear.php.net/package/Image_Canvas-0.3.0.tgz
http://download.pear.php.net/package/Image_Color-1.0.2.tgz
それらのおき場所とかは、こちらを参考
ちょいちょい試してる人がいたのでそれらのコードを参考にして作ってみた。
値はDBからとってます。
まずは作ったグラフを表示を引っ張ってくるHTML。imgタグでグラフ書いてるphpを呼び出します。
こんなかんじ
<body> <img src="pear_graph.php" /> </body>
次は肝心のPHP部分
<?php require_once('Image/Graph.php'); /* ----DB関係(ADOdbでデータ抽出)------------*/ $db = NewADOConnection(DB_TYPE); $db->pconnect($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME); if(!$db) die("エラー: データベース接続に失敗しました。"); $result = $db->execute("select * from table_name"); if(!$result) die("エラー: " . $db->ErrorMsg()); $count = $result->RecordCount(); $menuAry = array( "1" => 0, "2" => 0, "3" => 0 ); // DBから値とってきて配列にいれてます。 for($i = 0; $i < $count; $i++) { $ary = $result->FetchRow(); switch ($ary['page_id']) { case 1: $menuAry[1] += $ary['pageview']; break; case 2: $menuAry[2] += $ary['pageview']; break; case 3: $menuAry[3] += $ary['pageview']; break; default: break; } } $db->close(); /*-----------------------------------------------*/ // ここからがグラフ作るところ! // キャンパスを作る(500×400) $Graph =& Image_Graph::factory('graph', array(500, 400)); // フォント関係はphpコンパイル時ののモジュールが足りなくて出来ませんでした。 $Graph->add( Image_Graph::vertical( // タイトル Image_Graph::factory('title', array('test', 10)), Image_Graph::horizontal( $Plotarea = Image_Graph::factory('plotarea'), $Legend = Image_Graph::factory('legend'), 100 //グラフの大きさ、キャンパス内のX軸の位置 ), 20 // タイトルが占める縦のパーセンテージ ) ); $Dataset1 =& Image_Graph::factory('dataset'); $Dataset1->addPoint('capten', $menuAry[1]); $Dataset1->addPoint('m', $menuAry[2]); $Dataset1->addPoint('kanji', $menuAry[3]); // エリアに円として描画 $Plot =& $Plotarea->addNew('pie', array(&$Dataset1)); $Plotarea->hideAxis(); // Y軸のマーカーを作成しているらしい $Marker =& $Plot->addNew('Image_Graph_Marker_Value', IMAGE_GRAPH_PCT_Y_TOTAL); // 値がグラフのどのあたりに表示されるか $PointingMarker =& $Plot->addNew('Image_Graph_Marker_Pointing_Angular', array(-40, &$Marker)); // エリアにセット $Plot->setMarker($PointingMarker); // マーカーの表示フォーマットを設定しているらしい $Marker->setDataPreprocessor(Image_Graph::factory('Image_Graph_DataPreprocessor_Formatted', '%0.1f%%')); $Plot->Radius = 2; // グラフの色 $FillArray =& Image_Graph::factory('Image_Graph_Fill_Array'); $Plot->setFillStyle($FillArray); $FillArray->addNew('gradient', array(IMAGE_GRAPH_GRAD_RADIAL, 'white', 'green')); $FillArray->addNew('gradient', array(IMAGE_GRAPH_GRAD_RADIAL, 'white', 'blue')); $FillArray->addNew('gradient', array(IMAGE_GRAPH_GRAD_RADIAL, 'white', 'yellow')); // グラフの破片の密着度 $Plot->explode(5); // マーカーの背景とかボーダーとかの色 $PointingMarker->setLineColor( red ); $Marker->setBorderColor( green ); $Marker->setFillColor( yellow ); // グラフを画像として出力 $Graph->done(); ?>