plasmasphere.net -プラズマスフィア ドットネット-

Diary

PHPlotで円グラフの開始地点を変更する

2006/11/02(Thu) 00:11

PHPlotに限らず、グラフモジュールを使って円グラフを描くと、円の開始地点が頂点から90度のところ(円右端の頂点から)になって、矯正しろと上から命令を下されたので直してみました。

人使い荒いんだよ。
今回もGoogle先生からは直接答えを頂くことはできませんでした。
PHPlotってマニアックなんだろうか…。

PHPlotの日本語化と同じく、phplot.phpを直接弄ります。
毎度のごとくviだと行数が分からないので、 ImageFilledArc で検索してください。

// Draw the slice
ImageFilledArc($this->img, $xpos, $ypos+$h, $diameter, $diam2,
360-$end_angle, 360-$start_angle,
$slicecol, IMG_ARC_PIE);

こうなってると思うんですが、ここの第6引数と第7引数が開始地点の指定です。
要は、90度になってるんで270度足せば0度(360度)に戻ると、いうわけなので…

// Draw the slice
ImageFilledArc($this->img, $xpos, $ypos+$h, $diameter, $diam2,
360-$end_angle+270, 360-$start_angle+270,
$slicecol, IMG_ARC_PIE);

上記のようにしてやれば修正完了です。

円グラフの表示は頂点になったけど、ラベルの場所が修正されないのでこれもphplot.phpを直接弄ります。
多分ImageFilledArc 関数の何行か上に $mid_angle っていう宣言があると思うので、探してください。

$mid_angle = deg2rad($end_angle - ($val / 2));

これを修正します。
単純に270度足しただけだと何かおかしくなったので、色々試したところ90度足すとラベルも頂点からになるようです。
私のミスかもしれないけど。

$mid_angle = deg2rad($end_angle - ($val / 2) + 90 );

上記のように修正したら完了です。
お疲れ様した。

三角関数の詳しい方は ImageFilledArc 内の $start_angle に直接数式ぶち込むとかした方が正確かもしれません。
私は三角関数を習っていたであろう中学数学Iのテスト平均が確か30点くらいでして、cosとかtanとか見るだけで眩暈がしますので詳細の算出は拒否させていただきますね。

参考サイト:
http://ponk.jp/php_gd/index.php?page=3


似てるっぽいネタ


 
© 1999- plasmasphere.net All rights reserved.