• ベストアンサー

円グラフ描画について

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

  • PHP
  • 回答数4
  • ありがとう数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

  • 折れ線グラフの描画について

    GDを使って折れ線グラフを描画しようと考えております。 JpGraphなどを使うケースが多いようですが、GDのみで作成をしなければ いけないのですが、良いサンプルなどはありますでしょうか。 環境は以下です。 PHP4.2.2 GD1.6.2

    • ベストアンサー
    • PHP
  • html5で複雑な円グラフを描画

    質問失礼致します。 html5を使って複雑な円グラフを描画したいのですが、できなくて困っています。 Raphael.jsを使って円グラフを書いていますが、添付した画像のような円グラフはどうつくれば良いかわかりません。 どなたか知識をご教授頂けると幸いでございます。

  • 折れ線グラフの描画方法

    折れ線グラフの描画方法で悩んでいます。 jfreechartを使おうと思ったのですが、調べてみたところ折れ線グラフを2本以上描画できないと書いてあるホームページがあり、どうしても2本以上のグラフを比較する必要があるので使えそうにありません。 何か良い方法はないでしょうか。

    • ベストアンサー
    • Java
  • 「グラフ、円」描画のツールについて

    パソコンと測定器(スペアナ)をGP-IBケーブルをつないだ構成があります。 そこから取得したデータを使って、「グラフ、円」を繰り返し、描画(リアルタイムに近く)させたいのです。 最初からグラフィック・プログラムを作り込むのは、時間のロスなので、あるメーカ名のグラフツールを用いて、簡単に描画を行った人は沢山居ると思います。プログラミングにて、どのメーカ名のグラフツールの作成・デバッグが便利でしたか?また機能が豊富だったか?(言語:VC++にて開発予定です。) 教えて頂ければツールは、会社で購入します。

  • PHPでグラフ描画したい

    レンタルサーバーでPHPプログラムを運用しいるのですが、今度グラフを表示させたいと思っております。 数あるPHPのグラフライブラリの中から、“JpGraph”が使えるかどうか試してみたのですが、私が借りているレンタルサーバーでは“imagettfbbox関数”が使えないため、途中でエラーが発生して使えません。 X,Y軸のタイトルなどに漢字も表示させたいのですが、何か良い手段はありますでしょうか? ちなみに、“PHPlot”も試し、とりあえずサンプルプログラムのグラフは表示されたので使えると思うのですが、漢字の表示のさせ方がわかりません。御存知の方はいらっしゃいますか? PHPはVer4.4.4です。 MySqlのVer4.0.24も使用しております。

    • ベストアンサー
    • PHP
  • VC++2010(MFC)での描画

    とあるグラフを描こうとしています。…View.cppのOnDraw()内に描画の為のコードを記述するのが一般的だと思いますが、そのグラフを描く為の元データを得るまでに、かなり長い計算の為のコードを書く必要があります。又、途中で計算の為のコードが正しく書けているか検証する為に、描画(グラフの描画)をこまめにする必要があります。 例えば、基本的に描画とは関係のない計算の為の関数AAA(xx)、BBB(yy)、CCC(zz)…等を準備して、OnDrawing()からそれらの関数を呼ぶ場合で、関数AAAの中でも(即ちOnDrawの外でも)検証用に描画する(グラフを描く)ようなケースでは(即ち、関数AAA内でもpDCを使えるようにするには)、関数AAA内でどのようなコードを準備すればよいのでしょうか? それとも根本的にもっとスマートなやり方があるのでしょうか? 教えて下さい。

  • PHPで簡単なグラフを出したい

    GDモジュールのインストールしていないと思われる専用サーバでPHP4のグラフを使ったプログラミングをしたいのですが、どのような方法がありますか?

    • ベストアンサー
    • PHP
  • PHPのGD系の関数で描画した文字列の下に下線を引きたい

    PHPのGD系の関数で描画した文字列の下に下線を引きたい PHPのGD系の文字列関数がありますよね? (例:日本語が扱えるやつだとImageTTFTextとか) これで文字列の長さに揃えてリンクっぽく見せるために 下線を引きたいのですが、良い手法が思いつきません。 文字数をstrlenでカウントしてフォントのサイズ/2を掛けたら 文字列の長さになるかなーと思って試しましたが、 これだとaとあの文字の横幅が違うようにずれが出ます。 あるフォントである文字列描画関数を使ったときに文字列の横幅が 調べられるような手法があれば、その長さに応じた下線が引けるのですが、 そうした手法はないでしょうか?

    • ベストアンサー
    • PHP
  • jpgraphで円グラフの絶対値を表示する方法

    PHP+gd+jpgraphで円グラフの作成を試みています。描画そのものはできたのですが、初期値で%表示になっているラベルを絶対値(値そのもの)の表示に変更できず困っています。 jpgraphのマニュアルによると、 $p1->SetLabelType("PIE_VALUE_ABS"); にするとよいと書かれている(と思う)のですが、%表示しかしません。 jpgraph_pie.phpの初期値も DEFINE("PIE_VALUE_ABS",1); DEFINE("PIE_VALUE_PER",0); から DEFINE("PIE_VALUE_ABS",0); DEFINE("PIE_VALUE_PER",1); に変更してみましたが、まったく変わりません。 どうすれば値を表示できるでしょうか?

    • ベストアンサー
    • PHP
  • 複数の円グラフ

    http://f-site.org/articles/2006/10/06034300.html を参考に円グラフを置いています。 円グラフが一つの場合は問題ないのですが、 複数配置する場合は、どうすればよいのでしょうか? 試しに2個配置したのですが、 2個目が描画されると1つ目が消えてしまいます。

    • ベストアンサー
    • Flash

専門家に質問してみよう