読者です 読者をやめる 読者になる 読者になる

まめ畑

ゆるゆると書いていきます

pChartを使ってみた

ニコニコ動画 pChart PHP


pChartというPHPのライブラリが公開されているので使ってみました。
公式サイト→pChart | a PHP Charting library

このライブラリを使うと綺麗なグラフを簡単に作成することが出来ます。
かなり細かいところまで指定可能で、グラフの種類も豊富です。
どのようなグラフが作れるかは公式サイトにサンプルが多数掲載されているので見てください。


実際に作って見たところ思っていたよりも簡単に、綺麗なグラフが作れました。
ドキュメントを見てみたところ、かなり細かいところまで設定が可能なので柔軟にグラフを作成する事が出来ます。
また、グラフのデータも配列に格納して指定するだけでなく、CSVファイルから直接取り込めたり出来るので簡単です。
グラフの作成以外にも動的にグラフを作成するサイト向けにCacheの機能も備えています。
仕組みなども公式サイトに掲載されています。


とりあえず作ったもの

作るにはそこそこのデータが必要なので、今のところぱっと思いつくのはニコ割ゲームの参加者の推移くらいなのでDBからデータ拾ってさくっと作りました。
最近サンプルがニコニコなのは気にしない。
今回は日本語を使用していませんが、日本語のフォントを指定する事でお好きなフォントで日本語も表示可能です。


こんなグラフが作れました。
ちょっとばかし見にくいですがサイズとの兼ね合いでこうなりました。


で、ついでに過去の参加者推移を半年後とに書き出してみました。
ゲームランキングの更新時に更新されます。
mame-lab.com: The Leading Mame Lab Site on the Net



今回はゲームのランキングが更新されたタイミングでグラフを書き出すようにしていますが、動的にグラフを作成する場合はその都度ファイルに書き出さなくても、直接表示できるようにする事も可能です。


コード

殆どサンプルと同じですが、このグラフのコードは以下の感じです。

<?php
//データセット
$userCount = array("いろんなデータ");
$gameDate = array("いろんなデータ");

$DataSet = new pData();
$DataSet->AddPoint($userCount, "Serie1");
$DataSet->AddPoint($gameDate, "Serie2");
$DataSet->AddSerie("Serie1");
$DataSet->SetAbsciselabelSerie("Serie2");
$DataSet->SetSerieName("PlayUser", "Serie1");


//グラフ初期化
$Chart = new pChart(800,230);
$Chart->drawGraphAreaGradient(90,90,90,90,TARGET_BACKGROUND);
$Chart->setFontProperties("Fonts/tahoma.ttf",8);
$Chart->setGraphArea(60,40,785,190);

$Chart->setFontProperties("Fonts/tahoma.ttf",8);
$DataSet->SetYAxisName("Count");
$Chart->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_NORMAL,213,217,221,TRUE,0,0);
$Chart->drawGraphAreaGradient(40,40,40,-50);
$Chart->drawGrid(4,TRUE,230,230,230,20);

//描画
$Chart->setShadowProperties(3,3,0,0,0,30,4);
$Chart->drawCubicCurve($DataSet->GetData(),$DataSet->GetDataDescription());
$Chart->clearShadow();
$Chart->drawPlotGraph($DataSet->GetData(),$DataSet->GetDataDescription(),3,2,255,255,255);

$Chart->setFontProperties("Fonts/tahoma.ttf",7);
$Chart->writeValues($DataSet->GetData(),$DataSet->GetDataDescription(),"Serie1");

//凡例
$Chart->setFontProperties("Fonts/tahoma.ttf",8);
$Chart->drawLegend(530,5,$DataSet->GetDataDescription(),0,0,0,0,0,0,255,255,255,TRUE);

//タイトル
$Chart->setFontProperties("Fonts/MankSans.ttf",18);
$Chart->setShadowProperties(1,1,0,0,0);
$Chart->drawTitle(0,0,"Nico Game User Graph",255,255,255,660,30,TRUE);
$Chart->clearShadow();

$Chart->Render("hoge.png");
?>