PHPプロ!TIPS+

グラフ生成ライブラリの紹介(1)

Webサイトを構築していると、サイトの運営状況やアクセス数の管理など、さまざまな場面でグラフを使用する必要が出てきます。自分でグラフの描画を行うスクリプトを1から作るのは非常に大変ですが、Web上には公開されているグラフ描画ライブラリが数多く存在します。今回はその中から7つのグラフ生成ツールを紹介したいと思います。ここでは各ライブラリを使用して、最もシンプルな棒グラフの生成方法を紹介します。

前編後編に分けて紹介し、前編ではPEAR::Image_Graph、JpGraph、PHP/SWFCharts、HTML-GRAPHs(PHP)を紹介します。

・PEAR::Image_Graph  http://pear.veggerby.dk/

PEARのグラフ生成ライブラリです。オープンソースのグラフ描画ライブラリ GraPHPite を元に作成されています。PEAR::Image_Graphを使用するには、PEAR::Image_Canvas、PEAR::Image_Colorが必要です。また、オプションとしてPEAR::Number_RomanとPEAR::Number_Wordsが使用可能です。

現在14種類のグラフに対応しており、ほとんどの属性のカスタマイズが可能です。 PHP4・PHP5に対応しています。グラフの生成方法は以下のようになります。

image_graph.php
<?php
require_once 'Image/Graph.php';

$Graph =& Image_Graph::factory('graph'array(400300));
$Plotarea =& $Graph->addNew('plotarea');
$Dataset =& Image_Graph::factory('dataset');

$month_list array("Jan""Feb""Mar""Apr""May""Jun""Jul",
"Aug""Sep""Oct""Nov""Dec");
foreach (
$month_list as $month) {
    
$Dataset->addPoint($monthrand(1,30));
}

$Plot =& $Plotarea->addNew('bar'$Dataset);
$Plot->setFillColor('green@0.1');
$Graph->done();

?>

あとはこのスクリプトをHTMLの<img>タグのsrc属性に指定して読み込むだけです。

・JpGraph  http://www.asial.co.jp/jpgraph/

スウェーデンのAditus社が製作しているグラフ生成ライブラリです。 日本ではアシアル株式会社がローカライズ・販売しています。

20種類以上の形式をサポートし、プロフェッショナル版を購入するとさらに5種 類の形式が使用可能です。商用目的の場合はプロフェッショナル版のライセンスを購入する必要があります。キャッシュ機能を備え、負荷の高いアプリケーションでも使用することができます。PHP4・PHP5に対応しています。グラフの生成方法は以下の通りです。

jpgraph.php
<?php
include ("jpgraph/src/jpgraph.php");
include (
"jpgraph/src/jpgraph_bar.php");

$month_list $gDateLocale->GetShortMonth();

for( 
$i=0$i<12$i++) {
    
$datay[] = rand(1,30);
}

$graph = new Graph(300,200,'auto');
$graph->SetScale("textlin");
$graph->xaxis->SetTickLabels($month_list);

$plot = new BarPlot($datay);
$graph->Add($plot);
$graph->Stroke();

?>

あとはImage_Graphと同様に<img>タグのsrc属性に指定して読み込みます。

・PHP/SWF Charts  http://www.maani.us/charts/index.php

PHPでスクリプトを記述し、FLASH形式でグラフを出力するという変り種のグラフ生成ライブラリです。FLASHを使用しているだけあって、非常に見栄えが良く、視覚効果に富んだグラフを簡単に生成することができます。

開発者はライセンスを購入する必要はありませんが、サイトの運営者はライセンスを購入するか、グラフのリンク先をPHP/SWF ChartsのWebサイトに設定しておく必要があります(デフォルトで設定されています)。グラフの生成方法は以下のようになります。

phpswfcharts.php
<?php
include "charts/charts.php";
    
$chart 'chart_data' ] = array (
    array ( 
"",         "Jan""Feb""Mar""Apr""May""Jun""Jul",
"Aug""Sep""Oct""Nov""Dec" ),
    array ( 
"example",  1,2,3,4,5,6,7,8,9,10,11,12)
);

SendChartData $chart );

?>

次にこのスクリプトを表示するPHPスクリプトから読み込みます。

<?php
include "charts/charts.php";
echo 
InsertChart "charts/charts.swf""charts/charts_library",
"phpswfcharts.php" );
?>

FLASHを表示する<object>タグ自体をInsertChart関数で出力するためこのような 実装方法になります。表示する値と各タイトルを一つの配列内に収めなければならない点はちょっと面倒な気もします。

・HTML-GRAPHs(PHP)  http://www.gerd-tentler.de/tools/phpgraphs/

画像ではなくHTMLでグラフを出力するライブラリです。ライブラリ自体が1ファイルだけで構成されており、非常にシンプルなのでそれほど凝ったグラフは生成できないようですが、とりあえず素早くグラフを作成したいという時は重宝するでしょう。

付属のreadme.txt、ライブラリ本体のgraphs.inc.phpには簡単な設定方法が記載されているので、これ見ながらサンプルスクリプトをいじればなんとなく作れてしまいます。 現在棒グラフとフェーダーグラフのみが作成できます。

基本的にフリーで使用することができますが、開発は寄付で賄われているため、商用利用の場合は6ユーロ以上の寄付をしてほしいとのことです。グラフの作成方法は以下のようになります。

html_graphs.php
<?php
include_once("Html_Graphs/graphs.inc.php");
$graph = new BAR_GRAPH("vBar");

foreach (
range(1,12) as $value) {
    
$data[] = rand(1,30);
}

$month_list array("Jan""Feb""Mar""Apr""May""Jun""Jul",
"Aug""Sep""Oct""Nov""Dec");

$graph->values $data;
$graph->labels $month_list;
echo 
$graph->create();
?>

最後の$graph->create()でHTMLが出力されるため、<img>タグなどには含めずそのまま出力する必要があります。

バックナンバーについて

TIPS-MLは、毎週金曜日に更新され、新しい記事が掲載されます。

Tipsꗗy[W 

Pick Up Q&A

Q
ログファイルの中の空のデータ行を削除したい
 このエントリーをはてなブックマークに追加 
A
ログのデータ個数(列数)が固定で、空のログが"<><><>"だと既知であれば if ($line === "<><><>") { continue; } で読み飛ばしてもいいのでは? ...

>>続きを読む

まずは配列や文字列の扱いから、じっくり勉強して行きましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)