pChart version 1

CakePHPのサイトで円グラフとか折れ線グラフとか要ったのでメモ。

phpでグラフといえばpChartです。

いつのまにか pChartはバージョン2系になっているみたいですが、今回急いでいたので、昔のバージョン1でサクッとやっつけました。

ダウンロードして解凍し、pData.classとpChart.class をapp/Vendor の下にでもコピーします。

そして、それぞれの拡張子はphp (pData.php、pChart.php)に変更しておきます。

CakePHPの規約にあわせる事で、コントローラからimport出来るようになるでやんす。

こんな風に。

App::import('Vendor', 'pData');
App::import('Vendor', 'pChart');

 


円グラフ

pie_chart

ほぼサンプルのまんまをControllerのActionに書き写すだけでOKなんですけど、

http://pchart.sourceforge.net/documentation.php?topic=exemple15

ブラウザに画像を出力するにはこうです。

$Test->Stroke();

ただしCakePHPのControllerにこう書いた場合、Viewは無視されて画像だけ表示するレスポンスが返されます。

そうじゃなくて、CakePHPのViewの一部としてグラフをはめ込みたい訳だから、やっぱりサンプルと同様に画像をレンダリングして、それをブラウザから見せる形にしました。

例えばこんな感じで。

$Test->Render(APP."webroot/img/pie_chart.png");

そうする事でテンプレートファイル側からイメージタグでViewに埋め込めます。

<img src="/img/pie_chart.png" />

グラフの起点が3時なのは仕様なのでしょうか。

ドキュメントとソースを読みあさりましたが、指定出来る気が全くしません。

 


積算折れ線グラフ

graph

このサンプル(塗りつぶされた折れ線グラフ)の応用です。

積算するメソッドは無いので、データを用意する際に、それぞれのSerieの値を事前に積算しておく事で対応できます。

http://pchart.sourceforge.net/documentation.php?topic=exemple6

まずサンプルは、CSVからインポートするパターンですが、Arrayをセットしたいのでこんな感じに。

ポイントは、Serie0 はX軸 (時系列・月)のラベルに使うので、よくあるサンプルみたくAddAllSeries() をしちゃうと0月からはじまっちゃってアレです。

Serie0はSetAbsciseLabelSerieする事で、X軸ラベルを明示指定できます。

ついでにSetXAxisUnitする事で単位もつけられます。

$DataSet->AddPoint(array(1,2,3,4,5,6,7,8,9,10,11,12),"Serie0");
$DataSet->AddPoint(array(1,2,1,2,1,2,1,2,1,2,1,2),"Serie1");
$DataSet->AddPoint(array(3,4,3,4,3,4,3,4,3,4,3,4),"Serie2");
$DataSet->AddPoint(array(1,2,1,2,1,2,1,2,1,2,1,2),"Serie3");
$DataSet->AddPoint(array(3,4,3,4,3,4,3,4,3,4,3,4),"Serie4");

$DataSet->AddSerie("Serie1");
$DataSet->AddSerie("Serie2");
$DataSet->AddSerie("Serie3");
$DataSet->AddSerie("Serie4");

// X軸
$DataSet->SetAbsciseLabelSerie("Serie0");
$DataSet->SetXAxisUnit("月");

殆どCakePHP関係ないですけど。