pChartを使ってみた

pChartを使ってみました。

環境は、いつも通りUbuntuを使います。

セットアップ

pChartには、GDライブラリが必要なのでインストールします。

  • php5-gd 5.3.2-1ubuntu4.2
$ sudo aptitude install php5-gd


pChartを下記からダウンロードしてきます。
http://pchart.sourceforge.net/download.php

  • pChart.1.27d.rar

もしrarを解凍できないなら、下記を実行してインストールしてください。

$ sudo aptitude install unrar


解凍が終わったら、適当な場所に置きます。
下記は私の環境の場合です。

$ cd pChart.1.27d/
$ cp -R pChart /home/www/share/htdocs/devel/pChart

フォントも必要なので持ってきます。

$ mkdir /home/www/share/htdocs/devel/pChart/Fonts
$ cd /usr/share/fonts/truetype/takao
$ cp TakaoExGothic.ttf /home/www/share/htdocs/devel/pChart/Fonts

これでセットアップは完了です。

実装

さあ、実装です。

…とその前に、
pChartにはちょっとしたバグがあります。

PHP Notice:  Uninitialized string offset: 1 in /home/www/share/htdocs/devel/pChart/pData.class on line 127

このバグを修正するには下記の "+" の部分を書き足す必要があります。(pData.classの126行目辺り)

$ diff pData.class{.org,}                                         
--- pData.class.org     2010-09-01 00:12:45.421029540 +0900
+++ pData.class 2010-09-01 00:09:03.761092881 +0900
@@ -123,6 +123,9 @@
       $Value = $Value[0];
 
      $ID = 0;
+     if (!is_array($this->Data)) {
+      $this->Data = array();
+     }
      for($i=0;$i<=count($this->Data);$i++)
       { if(isset($this->Data[$i][$Serie])) { $ID = $i+1; } }


今度こそ、サンプルの実装です。
一気に飛びますが、下記がサンプルです。
各所で何してるかはコメントと下記のドキュメントを読んでください…。
http://pchart.sourceforge.net/documentation.php

<?php
/**
 * Demo pChart 
 */

require_once "./pChart/pData.class";
require_once "./pChart/pChart.class";

/**
 * プロットデータ設定 
 */

// プロットデータの用意
$pdata = new pData();
$pdata->AddPoint(array(8, 4, 6, 9, 25), '系列A');
$pdata->AddPoint(array(2, 0, 9, 12, 8), '系列B');

// X軸ラベルの用意
$pdata->AddPoint(range(1,5), 'Xlabels');

// プロットする系列の設定
$pdata->AddSerie('系列A');
$pdata->AddSerie('系列B');

// X軸ラベルの設定
$pdata->SetAbsciseLabelSerie("Xlabels");


/**
 * グラフ作成 
 */

// グラフ初期化 (画像サイズを設定: width, height)
$pchart = new pChart(900, 300);

// ラベルに使うFont設定
$pchart->setFontProperties('./pChart/Fonts/TakaoExGothic.ttf', 8);

// 画像のうち、グラフを描画する範囲を設定
$pchart->setGraphArea(80, 20, 680, 280);

// グラフ領域を描画
$pchart->drawGraphArea(255, 255, 255,false);

// 目盛を描画
$pchart->drawScale($pdata->GetData(), $pdata->GetDataDescription(), SCALE_NORMAL, 30, 30, 30, true, 0, 2);

// グリッドを描画
$pchart->drawGrid(4, true, 235, 235, 235, 50);

// データ点をプロット
$pchart->drawPlotGraph($pdata->GetData(), $pdata->GetDataDescription());

// データを線で結ぶ
$pchart->drawLineGraph($pdata->GetData(), $pdata->GetDataDescription());

// 凡例を描画
$pchart->drawLegend(690, 20, $pdata->GetDataDescription(), 255, 255, 255);

// グラフをブラウザに描画
$pchart->Stroke();

でき上がったグラフがこれです。

すごくキレイにできあがりました。

メリット、デメリット

ここで、メリットとデメリットを簡単に見ていきます。

  • メリット
    1. デザインのいいグラフができあがる
    2. 比較的実装が簡単
    3. GPLライセンス
  • デメリット
    1. 処理が遅い
    2. ライブラリ内でexit()する箇所がある
    3. エラー処理がいまいち
    4. 2008年から動き無し

まとめ

個人的にはデメリットが痛いですが、ちょっとグラフを作るのには非常に便利なライブラリです。
仕事で使う際には上手くデメリットをカバーするラッパークラスを作るか、改良が必要な気がします。