dポイントプレゼントキャンペーン実施中!

PHPでの円グラフ描画について質問です。
PHPのバージョンは4.2.2で、GDのバージョンは1.6.2です。

円を描画するimagefilledarc関数はGDのバージョンが2.0.1以上でないと
使えないようで、行き詰っています。。
円を描画するよい方法はあるでしょうか?

A 回答 (4件)

phptest さん、レスありがとうございます。


良いサンプルは なかなか無いみたいなので、自分で書いちゃいました。ご参考にどうぞ:

<?php
header("Content-Type: image/png");

//グラフを作る領域を決める

$im = imagecreate(200, 200) or die("error!\n");

//グラフの背景色 $bg

$bg = imagecolorallocate($im, 0, 0, 0);

//領域を塗る色 $fg[]

$fg[0] = imagecolorallocate($im, 255, 255, 0);
$fg[1] = imagecolorallocate($im, 0, 255, 255);
$fg[2] = imagecolorallocate($im, 255, 0, 255);
$fg[3] = imagecolorallocate($im, 0, 255, 0);

//描画(線を描く)色 $cg

$cg = imagecolorallocate($im, 255, 255, 255);

//--------------------------------------------
//処理したいデータ:A=100,B=150,C=200,D=150

$idata = Array(100,150,200,150);

//--------------------------------------------
$isum = array_sum($idata);
$icount = count($idata);

//外側の円を描く

imagearc($im,100,100,150,150,0,360,$cg);

//スタートの区切り線(ゼロの線)を描く

$x0 = 100;
$y0 = 25;

imageline($im,100,100,$x0,$y0,$cg);

//データを読みながら、区切り線を描いてゆき、領域を塗る

for($i = 0; $i < $icount; $i++) {

$theta = $theta + $idata[$i] / $isum * 360;

$endx = 100 + (150 / 2) * sin($theta * 2 * 3.1416 / 360);
$endy = 100 - (150 / 2) * cos($theta * 2 * 3.1416 / 360);

imageline($im,100,100,$endx,$endy,$cg);

imagefilltoborder($im, ($x0 + $endx + 100)/3, ($y0 + $endy + 100)/3, $cg,$fg[fmod($i,4)]);

$x0 = $endx;
$y0 = $endy;
}

//メモリを解放

imagepng($im);
imagedestroy($im);
?>
    • good
    • 0
この回答へのお礼

ありがとうございました。
大変助かりました。

お礼日時:2007/01/17 14:25

PHPでグラフといえばJpGraphが有名ですね


GD1にも対応しているようですがPHPの方が4.3.1以上必要のようです
ソースのjpgraph_pie.phpが円グラフのようなので参考になるのでは

参考URL:http://www.aditus.nu/jpgraph/
    • good
    • 0

phptest さん、こんばんは!



さて円グラフ作成についてのご質問。
ちょっとプログラミングの手間はかかりますが、お手元の環境で もし

[1]楕円を描く:imagearc()
[2]直線を描く:imageline()
[3]特定色での塗りつぶし:magefilltoborder()

の3つの関数が使えるのであれば、円グラフを描くことができます。具体的には[1]で外側を描き、[2]で円内の区切りを描き、[3]で色をつける…という手順になるでしょう。

もしご不明の点があれば、追加でご質問どうぞ。

参考URL:http://search.net-newbie.com/php/ref.image.html

この回答への補足

ご回答ありがとうございます。

やはり、ご回答いただいたやり方でやるしかないようですね。

とりあえず、[1]の円を描くのは大丈夫ですが、
[2]と[3]が、難しいですね。。。

形としては、4つの値を元に円グラフを描きたいと考えています。
例えば、
A=100
B=150
C=200
D=150
のような値がある場合、それぞれの割合を計算して、
描画したいのですが、良いサンプルなどないでしょうか?

補足日時:2007/01/15 00:09
    • good
    • 0

PHPはまだ始めたばかりなのでバージョンとかよくわかりませんが


下のサイトで円グラフ・棒グラフ・折れ線グラフ・レーダーグラフの書き方が載ってます
僕はまだスクリプトの記述は出来ないのでレーダーグラフのスクリプトを少し変えて使っています

参考URL:http://www.gadgety.net/shin/tips/unix/php-gd.html

この回答への補足

サイトを拝見したのですが、
どうもGDのバージョンが2.0以上でないと難しいかもしれないですね。
今からサーバの設定等を変更するのは難しいので、
現状でなんとか対応できればいいのですが。。。

補足日時:2007/01/14 07:49
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!