PHPでグラフをしたいと思い、色々調べた結果「PHPlot」というありがたいソフトにたどり着きました。ですが英語なので、当方のメモとしていくつか書き残したいと思います。

 

・利用だけなら無料。もちろん著作権はPHPlot作成者様にあります。

・著作権関係のドキュメントがありますが英語なので、当方は「基本プログラムを一切触らず」「再頒布しない」、使用するWebサイト上で「PHPlotを使用している旨の表示」を常識の範囲として遵守しました。

 

Q.なぜ「PHPlot以外の他のグラフプログラム」を利用しなかったのか?

A.当方の力不足と思われますが、他のプログラムを現在のPHPのバージョンで使用するとエラーが多数出ました。

ですので、最終版が2015年ながらエラーの出ない「PHPlot」を使用させていただきました。作者様には感謝です。

Thanks to the author of PHPlot.

 


PHPlotの公式ダウンロードサイト

https://sourceforge.net/projects/phplot/

PHPlotの利用方法

・PHPlotのプログラムが入ったフォルダをプログラム内から参照して使用できます。

・実行時にグラフを描画するので、他のグラフプログラムと同様にGDが有効になっていることが必要と思われます。

<?php
phpinfo();
?>

でGDが利用できるかどうか確認して下さい。

 

・日本語のTTFフォント(TrueType Font)が必須です。私は文字情報技術促進協議会のIPAフォントを利用させて頂きました。

 

関連して「グラフのタイトルが文字化け」する場合は、

SetDefaultTTFont

で、日本語TTFフォントを指定しているかどうかをご確認下さい。

*本来はTTFなのですが、個人的にTTFフォントと呼称しています。

 

 

当方の動作確認済み環境

PHP 7.4.13

 

PHPlotに関するドキュメント・英語のみ

http://phplot.sourceforge.net/phplotdocs/

当記事の以下のリンクは全てこのドキュメントの各ページとします。(例外は併記します)

 

PHPlotの学習方法

ネットにアップされていた諸先輩方の情報と公式ドキュメントで学習させていただきました(謝辞)

その時に「あまりにも情報が少ない」と感じたので、この記事を書きました。

 


実際のプログラムソースですが、用語集を兼ねた記事のため、このままでは全く動作しません

 

用語の説明

ラベル:グラフに描く数値や見出し

凡例ボックス(以下、凡例):グラフの補足として、別枠で表示するもの

 

//グラフを表示する画像のクラスオブジェクトの作成とサイズの指定

$plot = new PHPlot(800,600);

//TTFフォントのある場所指定
$plot->SetTTFPath(dirname(__FILE__) . '/ttf/');

//TTFフォントの指定
$plot->SetDefaultTTFont('ipaexg.ttf');

//境界線の種類の指定 
$plot->SetImageBorderType('plain');

//円グラフを表示する
$plot->SetPlotType('pie');
//グラフデータとして渡すタイプの指定
$plot->SetDataType('text-data-single');

//実際のデータをセット 中身は配列データ
$plot->SetDataValues($data);

//色をセット
$plot->SetDataColors(array('orange', 'yellow', 'cyan', 'red',
                        'magenta', 'green', 'lavender', 'brown',
                        'gray', 'pink'));

//上部のグラフタイトルの指定
$str = 'グラフタイトル';
$plot->SetTitle($str); 

//凡例ボックスを表示する場合
foreach ($data as $row){
  $plot->SetLegend(implode(': ', $row));
}

//凡例のレイアウト
http://phplot.sourceforge.net/phplotdocs/dev-legend.html
//凡例内を左寄せ
$plot -> SetLegendStyle('left', 'left');

//サンプル 凡例をグラフ内のどこに表示するのか?
http://phplot.sourceforge.net/phplotdocs/ex-legendpos.html

//棒グラフと円グラフの影のサイズ
$plot -> SetShading(0);

//X軸ラベルの角度
$plot->SetXLabelAngle(30);

//X軸ラベルの位置
$plot->SetXDataLabelPos('plotup');

//グリッド 未検証
$plot->SetDrawDashedGrid('False');

//X軸ラベルの書式設定 データはUnixタイムスタンプ(日付時刻型)
$plot->SetXLabelType('time', '%m/%d');
※実行サンプル

//X軸から点線を描く場合
$plot->SetDrawXDataLabelLines(True);
//円グラフのラベル位置の調整
$plot -> SetLabelScalePosition(0.4);
//ラベルのカスタマイズ
//参考 http://phplot.sourceforge.net/phplotdocs/ex-pielabeltype.html 
//独自関数
function mycallback($str)
{
    list($percent, $label) = explode(' ', $str, 2);
    return sprintf('%s (%.1f%%)', $label, $percent);
}
//円グラフにラベルを表示
$plot->SetPieLabelType(array('percent', 'label'), 'custom', 'mycallback');

//ラベルサイズ指定 初期値 generic:8, legend:8, title:14, xy_label:6, xy_title:10
$plot->SetFont('title', null, 12);

//Y軸の目盛りの間隔
$plot->SetYTickIncrement(1);
//Y軸タイトル
$plot->SetYTitle('件数');
//グラフを出力 最終処理
$plot->DrawGraph();
?>

 

既知の問題点

現時点の私の知識なので、研究によっては改善できる可能性があります。

・グラフだけを表示するので、戻るなどのリンクを表示できない。

・HTMLページ内の一部としてグラフを表示する場合は「PHPlot用プログラム処理で画像として出力」し、それをHTMLの<img>タグで対応

PHPlot用プログラムの例文

$output_img_file = ‘okayamaken-corona-map.jpg’;
imagejpeg($img, $output_img_file, 75);

 

 

PHPlotで作成したグラフの実行例

https://okayama-corona.in-jpn.com/

の「グラフ」です。

 

グラフの種類 実際のサンプルコード

●印は管理人のお気に入り

円グラフ Pie Chart

http://phplot.sourceforge.net/phplotdocs/ex-pie2.html

凡例のある円グラフ

http://phplot.sourceforge.net/phplotdocs/ex-pie1.html

 

●棒グラフ/Bar Chart

http://phplot.sourceforge.net/phplotdocs/ex-bars1.html

●前述のグラフの2D版

http://phplot.sourceforge.net/phplotdocs/ex-bars2.html

積み上げ縦棒グラフ

http://phplot.sourceforge.net/phplotdocs/ex-stackedbars1.html

●積み上げ縦棒グラフに数値あり

http://phplot.sourceforge.net/phplotdocs/ex-stackedbars3.html

 

折れ線グラフ/Line Plot

http://phplot.sourceforge.net/phplotdocs/examples.html#ex-lines1

 

●折れ線グラフと積み上げ棒グラフ

http://phplot.sourceforge.net/phplotdocs/ex-outbreak.html

 

注釈を入れる

http://phplot.sourceforge.net/phplotdocs/ex-annotate.html

 

1度に2種の棒グラフを表示

http://phplot.sourceforge.net/phplotdocs/ex-twoplot1.html

 

データ値付き棒グラフ

http://phplot.sourceforge.net/phplotdocs/ex-bars4.html

 

折れ線グラフの点にデータ値を付加する

http://phplot.sourceforge.net/phplotdocs/ex-linepoints2.html

 

その他

テキストの行間

http://phplot.sourceforge.net/phplotdocs/SetLineSpacing.html

http://phplot.sourceforge.net/phplotdocs/conc-colors.html

 

タイトルで改行 \nを入れる

 

凡例

SetLegendUseShapes

凡例内のマークを四角形または、折れ線グラフと同じマーカーを使用する。

ただしグラフの種類が「Points/LinePoints/Lines/Squared」の時のみ有効で、それ以外のグラフでは指定をしても無視されます

補足:

Point Shapes:凡例の中のポイント形状のことで◆、●、▲など。マーカー付折れ線グラフなど

Line markers:凡例の中のラインのことで色違いの─。通常の折れ線グラフなど

サンプル5.35において

require_once ‘legendshape.php’;

と別途のPHPファイルを必要とする記述がありますが、PHPlotの最新バージョンではその一文は不要。

$plot -> SetLegendUseShapes(True);

のみで凡例に▲や色付きの─が表示されたので、おそらく基本ファイル内に組み込まれていると思われます。



ȥåץڡ