書籍転載:PHPライブラリ&サンプル実践活用[厳選100]
さまざまなグラフを動的に生成する(実行編)(JpGraph)
グラフ作成ライブラリJpGraphを使って、棒グラフ、折れ線グラフ、レーダーチャートを作成する方法を説明する。書籍転載の16本目(書籍内の番号は「25」)。
書籍転載について
ご注意
本記事は、書籍の内容を改変することなく、そのまま転載したものです。このため用字用語の統一ルールなどはBuild Insiderのそれとは一致しません。あらかじめご了承ください。
本項では、グラフ作成ライブラリJpGraphのあまたある機能の中から、特によく利用すると思われる円グラフ、棒グラフ、折れ線グラフ、レーダーチャートを作成する方法について紹介します。本項で紹介しきれないグラフ(または、そのプロパティ)ついては、公式サイトのリファレンスも参照してください。
- 名称: JpGraph
- URL: http://jpgraph.net/
- インストール方法: include_path に配置
- ファイル: jpgraph.php、jpgraph_pie.php、jpgraph_bar.php、jpgraph_line.php、jpgraph_radar.php
円グラフを作成する
まずは、シンプルな円グラフからです(リスト25-1、図25-1)。JpGraphを利用するにあたっては、すべての機能の中核となるjpgraph.phpと、グラフに応じて使用するjpgraph_xxxxx.phpをインクルードします。円グラフであれば、jpgraph_pie.phpです(1)。
<?php
// 1円グラフ描画に必要なライブラリ
require_once 'libs/jpgraph.php';
require_once 'libs/jpgraph_pie.php';
// データ、凡例、描画色を準備
$data = array(
'data' => array(3125, 2981, 1846, 1124, 1007),
'legends' => array('駅前店','本通店','胡町点','春日店','元町店'),
'colors' => array('#0000FF', '#6600FF', '#CC00FF', '#66CC00', '#FFCC00')
);
// 2円グラフを準備
$pie = new PiePlot($data['data']); // データ
$pie->setLegends($data['legends']); // 凡例
$pie->setSize(0.4); // サイズ
$pie->setSliceColors($data['colors']); // 描画色
// 3グラフの描画先
$g = new PieGraph(400,400); // サイズ
$g->title->setFont(FF_MINCHO, FS_NORMAL, 14); // タイトルフォント
$g->legend->setFont(FF_MINCHO, FS_NORMAL, 14); // 凡例フォント
$g->title->set('店舗別売上高'); // タイトル
$g->add($pie); // グラフを追加
// 4グラフを描画
$g->stroke();
|
続いて、PiePlotクラスで円グラフを作成します(2)。コンストラクタにはグラフの元となるデータを設定します。また、凡例(setLegends)、グラフ領域に対するサイズ(setSize)、描画色(setSliceColors)も併せて設定しておきましょう。データ、凡例などは配列としてハードコーディングしていますが、もちろん、実際のアプリではデータベースなどからデータを取り出すことになるでしょう。
円グラフの描画先(キャンバス)を表すのは、PieGraphクラスの役割です(3)。コンストラクタにはサイズ(幅、高さ)を指定します。また、titleプロパティでグラフのタイトルを指定しておきます。日本語を利用する際には、あらかじめsetFontメソッドで「フォント名」「スタイル」「サイズ」を指定しておきます。日本語では、スタイルはノーマル(FS_NORMAL)固定です。
最後にstrokeメソッドで、グラフを描画して完了です(4)。
棒グラフを作成する
棒グラフの作成方法も、円グラフとほぼ同じです(リスト25-2、図25-2)。
まず、BarPlotクラスに対して、データ(コンストラクタ)、凡例(setLegend)、塗りつぶし色(setFillColor)を設定します(1)。ただし、ここでは複数項目の棒グラフをまとめたいので、BarPlot配列をGroupBarPlotオブジェクトにセットし、束ねている点に注目です(2)。単一項目の棒グラフであれば、そのままキャンバス(Graphオブジェクト)にセットできます。
<?php
// 棒グラフ描画に必要なライブラリ
require_once 'libs/jpgraph.php';
require_once 'libs/jpgraph_bar.php';
// データ、凡例、描画色を準備
$data = array(
'data' => array(
array(151, 170, 140, 116, 157),
array(161, 147, 182, 105, 140),
array(115, 110, 90, 93, 88),
),
'legends' => array('駅前店', '本通店', '胡町店'),
'colors' => array('red@0.8', 'green@0.8', 'blue@0.8'),
);
// 1配列から順にデータ/凡例/描画色を取得
for ($i = 0; $i < count($data['data']); $i++) {
$b[] = new BarPlot($data['data'][$i]); // データ
$b[$i]->setLegend($data['legends'][$i]); // 凡例
$b[$i]->setFillColor($data['colors'][$i]); // 塗りつぶし色
}
// 2複数項目の棒グラフをグループ化
$group = new GroupBarPlot($b);
// グラフの描画先
$g = new Graph(400, 400); // サイズ
$g->setScale('textlin'); // 目盛り
$g->title->setFont(FF_MINCHO, FS_NORMAL, 14); // タイトルフォント
$g->title->set('上半期 店舗別販売件数'); // タイトル
$g->legend->setFont(FF_MINCHO, FS_NORMAL, 14); // 凡例フォント
// グラフを追加&描画
$g->add($group);
$g->stroke();
|
その他、初出の点(太字部分)についても補足しておきます。
・setFillColorメソッド
「red@0.8」のような値は、透明度を表しています。0(完全な透明)~1(不透明)の間の値で指定します。
・setScaleメソッド
目盛りの設定を表します。値は、lin(Linearscale)、log(Logarithmic scale)、text(テキスト表記)、int(数値表記)から選択できます。lintextとは、X軸がテキスト表記、Y軸がLinear scaleであることを意味します。
折れ線グラフを生成する
リスト25-3は、折れ線グラフを作成する例です(図25-3)。用途は棒グラフに近いものがありますが、変化により関心がある場合には折れ線グラフを利用します。
<?php
// 折れ線グラフ描画に必要なライブラリ
require_once 'libs/jpgraph.php';
require_once 'libs/jpgraph_line.php';
// データ、凡例、描画色を準備
$data = array(
'data' => array(
array(151, 170, 140, 116, 157),
array(161, 147, 182, 105, 140),
array(115, 110, 90, 93, 88),
),
'legends' => array('駅前店', '本通店', '胡町店'),
'colors' => array('red', 'green', 'blue'),
);
// グラフの描画先
$g = new Graph(400, 400); // サイズ
$g->setScale('textlin'); // 目盛り
$g->title->setFont(FF_MINCHO, FS_NORMAL, 14); // タイトルフォント
$g->title->set('上半期 店舗別販売件数'); // タイトル
$g->legend->setFont(FF_MINCHO, FS_NORMAL, 14); // 凡例フォント
// 配列から順に折れ線グラフを生成&キャンバスに追加
for ($i = 0; $i < count($data['data']); $i++) {
$l[] = new LinePlot($data['data'][$i]); // データ
$l[$i]->setLegend($data['legends'][$i]); // 凡例
$l[$i]->setColor($data['colors'][$i]); // 描画色
$g->add($l[$i]); // 追加
}
// グラフを描画
$g->stroke();
|
作成方法は、LinePlotクラスを利用している他は、これまでとほぼ同じです。ただし、棒グラフのように、複数のPlotを束ねるためのGroupLinePlotクラスはありませんので、LinePlotクラスを直接にaddメソッドでGraphオブジェクトに追加していきます(太字部分)。
レーダーチャートを作成する
最後に、レーダーチャートを作成してみます(リスト25-4、図25-4)。サンプルにもあるように、複数の関連する項目のバランスを表すのに適したグラフ形式です。
<?php
// レーダーチャートの描画に必要なライブラリ
require_once 'libs/jpgraph.php';
require_once 'libs/jpgraph_radar.php';
// データ、凡例を準備
$data = array(
'data' => array(100, 80, 75, 90, 95),
'legends' => array('国語', '数学', '理科', '社会', '英語')
);
// グラフの描画先
$g = new RadarGraph(400, 400); // サイズ
$g->setScale('lin'); // 目盛り
$g->title->setFont(FF_MINCHO, FS_NORMAL, 14); // タイトルフォント
$g->title->set('学科別成績'); // タイトル
$g->axis->title->setFont(FF_MINCHO, FS_NORMAL, 14); // 軸フォント
$g->setTitles($data['legends']); // 軸タイトル
$g->add(new RadarPlot($data['data'])); // 追加
// グラフを描画
$g->stroke();
|
レーダーチャートを表すにはRadarPlotクラスを、チャートの描画先はRadarGraphを、それぞれ利用します。用法はほぼこれまでと同じですが、一点、チャートの各項目はsetTitlesメソッドで設定する点に注意してください。
※以下では、本稿の前後を合わせて5回分(第14回~第18回)のみ表示しています。
連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。
14. markdown形式のテキストをHTMLに変換する(PHP Markdown)
Markdown形式のファイルをHTML形式のコードに変換するためのライブラリ「PHP Markdown」の基本的な使い方を説明する。書籍転載の14本目(書籍内の番号は「38」)。
16. 【現在、表示中】≫ さまざまなグラフを動的に生成する(実行編)(JpGraph)
グラフ作成ライブラリJpGraphを使って、棒グラフ、折れ線グラフ、レーダーチャートを作成する方法を説明する。書籍転載の16本目(書籍内の番号は「25」)。
17. Excelファイルを作成/操作する(PHPExcel)
Excelファイルを作成/操作できるライブラリ「PHPExcel」の基本的な使い方を説明する。書籍転載の17本目(書籍内の番号は「36」)。
18. ExcelファイルをHTMLとして表示する(php-excel-reader)
Excelファイルを読み込んで、HTMLのテーブルとして出力するライブラリ「php-excel-reader」の基本的な使い方を説明する。書籍転載の18本目(書籍内の番号は「67」)。