Deep Insider の Tutor コーナー
>>  Deep Insider は本サイトからスピンオフした姉妹サイトです。よろしく! 
書籍転載:PHPライブラリ&サンプル実践活用[厳選100]

書籍転載:PHPライブラリ&サンプル実践活用[厳選100]

さまざまなグラフを動的に生成する(実行編)(JpGraph)

2014年9月16日

グラフ作成ライブラリJpGraphを使って、棒グラフ、折れ線グラフ、レーダーチャートを作成する方法を説明する。書籍転載の16本目(書籍内の番号は「25」)。

WINGSプロジェクト 山田 祥寛
  • このエントリーをはてなブックマークに追加

書籍転載について

 本コーナーは、技術評論社発行の書籍『PHPライブラリ&サンプル実践活用[厳選100]』の中から、特にBuild Insiderの読者に有用だと考えられる項目を編集部が選び、同社の許可を得て転載したものです。

 

 『PHPライブラリ&サンプル実践活用[厳選100]』の詳細や購入は技術評論社のサイト目次ページをご覧ください。

ご注意

 本記事は、書籍の内容を改変することなく、そのまま転載したものです。このため用字用語の統一ルールなどは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
<?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();
リスト25-1 pie.php
図25-1 円グラフを描画

図25-1 円グラフを描画

 続いて、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
<?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();
リスト25-2 bar.php
図25-2 集合棒グラフを生成

図25-2 集合棒グラフを生成

 その他、初出の点(太字部分)についても補足しておきます。

・setFillColorメソッド

 「red@0.8」のような値は、透明度を表しています。0(完全な透明)~1(不透明)の間の値で指定します。

・setScaleメソッド

 目盛りの設定を表します。値は、lin(Linearscale)、log(Logarithmic scale)、text(テキスト表記)、int(数値表記)から選択できます。lintextとは、X軸がテキスト表記、Y軸がLinear scaleであることを意味します。

折れ線グラフを生成する

 リスト25-3は、折れ線グラフを作成する例です(図25-3)。用途は棒グラフに近いものがありますが、変化により関心がある場合には折れ線グラフを利用します。

PHP
<?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();
リスト25-3 line.php
図25-3 折れ線グラフを生成

図25-3 折れ線グラフを生成

 作成方法は、LinePlotクラスを利用している他は、これまでとほぼ同じです。ただし、棒グラフのように、複数のPlotを束ねるためのGroupLinePlotクラスはありませんので、LinePlotクラスを直接にaddメソッドでGraphオブジェクトに追加していきます(太字部分)。

レーダーチャートを作成する

 最後に、レーダーチャートを作成してみます(リスト25-4、図25-4)。サンプルにもあるように、複数の関連する項目のバランスを表すのに適したグラフ形式です。

PHP
<?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();
リスト25-4 radar.php
図25-4 レーダーチャートを作成

図25-4 レーダーチャートを作成

 レーダーチャートを表すにはRadarPlotクラスを、チャートの描画先はRadarGraphを、それぞれ利用します。用法はほぼこれまでと同じですが、一点、チャートの各項目はsetTitlesメソッドで設定する点に注意してください。

※以下では、本稿の前後を合わせて5回分(第14回~第18回)のみ表示しています。
 連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。

書籍転載:PHPライブラリ&サンプル実践活用[厳選100]
14. markdown形式のテキストをHTMLに変換する(PHP Markdown)

Markdown形式のファイルをHTML形式のコードに変換するためのライブラリ「PHP Markdown」の基本的な使い方を説明する。書籍転載の14本目(書籍内の番号は「38」)。

書籍転載:PHPライブラリ&サンプル実践活用[厳選100]
15. さまざまなグラフを動的に生成する(準備編)(JpGraph)

グラフ作成ライブラリ「JpGraph」を利用するまでの準備手順を説明する。書籍転載の15本目(書籍内の番号は「24」)。

書籍転載:PHPライブラリ&サンプル実践活用[厳選100]
16. 【現在、表示中】≫ さまざまなグラフを動的に生成する(実行編)(JpGraph)

グラフ作成ライブラリJpGraphを使って、棒グラフ、折れ線グラフ、レーダーチャートを作成する方法を説明する。書籍転載の16本目(書籍内の番号は「25」)。

書籍転載:PHPライブラリ&サンプル実践活用[厳選100]
17. Excelファイルを作成/操作する(PHPExcel)

Excelファイルを作成/操作できるライブラリ「PHPExcel」の基本的な使い方を説明する。書籍転載の17本目(書籍内の番号は「36」)。

書籍転載:PHPライブラリ&サンプル実践活用[厳選100]
18. ExcelファイルをHTMLとして表示する(php-excel-reader)

Excelファイルを読み込んで、HTMLのテーブルとして出力するライブラリ「php-excel-reader」の基本的な使い方を説明する。書籍転載の18本目(書籍内の番号は「67」)。

サイトからのお知らせ

Twitterでつぶやこう!