PHPプロ!TIPS+
JpGpraphで3D円グラフをきれいに表示させる方法
PHPでグラフを作成する場合によく使われるJpGraphというライブラリがあります。
JpGraphは教育などの非営利目的では無料で使えますので、PHPでのグラフ作成ではよく紹介されたりしています。
しかし、このJpGraphで、3D円グラフを作成した場合、あまりきれいなグラフを作ってくれません。
管理画面等での使用には問題ないかもしれませんが、一般に公開されるようなグラフの場合、デフォルトの3D円グラフではちょっと気になります。
今回はJpGpraphで3D円グラフをきれいに表示させる方法を紹介します。
JpGraphの設置・設定方法等については、http://www.asial.co.jp/jpgraphを参考にしてください。
下記サンプルコードでは長々と書いてありますが、きれいに見せる為にやっていることは以下のことだけです。
- 3D円グラフを作成予定のサイズよりかなり大きなサイズで作成する
- 大きなサイズで作成したグラフをGDで縮小して表示する
実はこれだけでデフォルトと比べるとかなりきれいなグラフが作成できます。
以下、簡単なサンプルです。
※このサンプルでは違いを比べやすいように、GETクエリにr=1を指定するとリサイズするようにしてあります。
<?php
$RESIZE_SCALE = 4; //memory_limit設定と相談。
$demo_data = array(74, 55, 49, 45, 37 ); //適当なデータを作成
$GRAPH_SIZE = array('width' => 300, 'height' => 200, 'fontsize' => 10,
'margin' => 5);
$BIG_GRAPH_SIZE = $GRAPH_SIZE;
//クエリにr=1を指定した場合にリサイズする
if (isset($_GET["r"]) && $_GET["r"] == 1) {
foreach ($BIG_GRAPH_SIZE as $_key => $_val) {
$BIG_GRAPH_SIZE[$_key] *= $RESIZE_SCALE;
}
}
/**
* グラフを作成する
*/
include_once ("/path/to/jpgraph.php");
include_once ("/path/to/jpgraph_pie.php");
include_once ("/path/to/jpgraph_pie3d.php");
$pie = new PiePlot3D($demo_data);
$pie->SetSize(0.5);
$pie->SetStartAngle(90);
$pie->setAngle(50);
$pie->value->SetFont(FF_GOTHIC, FS_NORMAL, $BIG_GRAPH_SIZE["fontsize"]);
$pie->value->SetMargin($BIG_GRAPH_SIZE["margin"]);
$graph = new PieGraph($BIG_GRAPH_SIZE["width"],
$BIG_GRAPH_SIZE['height'], 'auto');
$graph->SetFrame(false);
$graph->img->SetImgFormat('png');
$graph->img->SetExpired(false);
$graph->Add($pie);
$file_path = "./demo_img/" . time() . ".png"; //今回は適当なファイル名で保存
$graph->Stroke($file_path);
$source = imagecreatefrompng($file_path);
//クエリにr=1を指定した場合にリサイズする
if (isset($_GET["r"]) && $_GET["r"] == 1) {
$output = imagecreatetruecolor($GRAPH_SIZE['width'],
$GRAPH_SIZE['height']);
imagecopyresampled( $output, $source, 0, 0, 0, 0
, $GRAPH_SIZE['width'] , $GRAPH_SIZE['height']
, $BIG_GRAPH_SIZE['width'], $BIG_GRAPH_SIZE['height']
);
} else {
$output = $source;
}
header("Content-Type: image/png");
imagepng($output);
exit;
?>
※デフォルト

※変更後

このように、デフォルトのものと比べても、かなり3Dの円のラインがきれいに表示されます。
実際の運用時には大きな画像を作るのは非常に負荷が高くなりますので、うまくキャッシュを使うようにすると良いでしょう。
バックナンバーについて
TIPS-MLは、毎週金曜日に更新され、新しい記事が掲載されます。





ページのトップへ


GETのままでは検索エンジンのロボットが拾ってくれなかったためにSEO対策として有効だと言われていますね。