• ベストアンサー

円グラフ描画について

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

質問者が選んだベストアンサー

  • ベストアンサー
  • hkd9001
  • ベストアンサー率48% (99/204)
回答No.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); ?>

phptest
質問者

お礼

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

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

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

参考URL:
http://www.aditus.nu/jpgraph/
すると、全ての回答が全文表示されます。
  • hkd9001
  • ベストアンサー率48% (99/204)
回答No.2

phptest さん、こんばんは! さて円グラフ作成についてのご質問。 ちょっとプログラミングの手間はかかりますが、お手元の環境で もし [1]楕円を描く:imagearc() [2]直線を描く:imageline() [3]特定色での塗りつぶし:magefilltoborder() の3つの関数が使えるのであれば、円グラフを描くことができます。具体的には[1]で外側を描き、[2]で円内の区切りを描き、[3]で色をつける…という手順になるでしょう。 もしご不明の点があれば、追加でご質問どうぞ。

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

補足

ご回答ありがとうございます。 やはり、ご回答いただいたやり方でやるしかないようですね。 とりあえず、[1]の円を描くのは大丈夫ですが、 [2]と[3]が、難しいですね。。。 形としては、4つの値を元に円グラフを描きたいと考えています。 例えば、 A=100 B=150 C=200 D=150 のような値がある場合、それぞれの割合を計算して、 描画したいのですが、良いサンプルなどないでしょうか?

すると、全ての回答が全文表示されます。
  • leap_day
  • ベストアンサー率60% (338/561)
回答No.1

PHPはまだ始めたばかりなのでバージョンとかよくわかりませんが 下のサイトで円グラフ・棒グラフ・折れ線グラフ・レーダーグラフの書き方が載ってます 僕はまだスクリプトの記述は出来ないのでレーダーグラフのスクリプトを少し変えて使っています

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

補足

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

すると、全ての回答が全文表示されます。

関連するQ&A