在php绘制饼图的方法

时间:2021-05-02

在一些程序中,我们需要使用饼图来统计一些信息,以获得直观的统计效果,如访问统计,调查统计以及一些财务会计程序当中。

本文给出相关的函数来实现这个功能。

源程序给出了较详细的注释,你可以根据你个人的需要对颜色进行修改或调整。

给出的实例分为两部分:

第一部分就是给出的绘制饼图的函数;

第二部分是一个实例演示如何使用这些函数。

用来生成饼图的原函数代码:

########bimage.php3########functionbimage($chartdata,$chartfont,$chartdiameter,$chartlabel,$colorslice,$colorbody,$colorborder,$colortext,$file){$chartdiameter=150;$chartfontheight=imagefontheight($chartfont);$d1=10;$d2=20;$d3=30;$d4=40;$d5=50;$chartdata=array($d1,$d2,$d3,$d4,$d5);$chartlabel=array("D1","D2","D3","D4","D5");$chartwidth=$chartdiameter+20;$chartheight=$chartdiameter+20+(($chartfontheight+2)*count($chartdata));header("content-type:image/gif");$image=imagecreate($chartwidth,$chartheight);$colorbody=imagecolorallocate($image,$colorbody[0],$colorbody[1],$colorbody[2]);$colortext=imagecolorallocate($image,$colortext[0],$colortext[1],$colortext[2]);$colorborder=imagecolorallocate($image,$colorborder[0],$colorborder[1],$colorborder[2]);for($i=0;$i{$t=imagecolorallocate($image,$colorslice[$i][0],$colorslice[$i][1],$colorslice[$i][2]);$colorslice[$i]=$t;}for($i=0;$i{$charttotal+=$chartdata[$i];}$chartcenterx=$chartdiameter/2+10;$chartcentery=$chartdiameter/2+10;$degrees=0;for($i=0;$i{$startdegrees=round($degrees);$degrees+=(($chartdata[$i]/$charttotal)*360);$enddegrees=round($degrees);$currentcolor=$colorslice[$i%(count($colorslice))];imagearc($image,$chartcenterx,$chartcentery,$chartdiameter,$chartdiameter,$startdegrees,$enddegrees,$currentcolor);list($arcx,$arcy)=circle_point($startdegrees,$chartdiameter);imageline($image,$chartcenterx,$chartcentery,floor($chartcenterx+$arcx),floor($chartcentery+$arcy),$currentcolor);list($arcx,$arcy)=circle_point($enddegrees,$chartdiameter);imageline($image,$chartcenterx,$chartcentery,ceil($chartcenterx+$arcx),ceil($chartcentery+$arcy),$currentcolor);$midpoint=round((($enddegrees-$startdegrees)/2)+$startdegrees);list($arcx,$arcy)=circle_point($midpoint,$chartdiameter/2);imagefilltoborder($image,floor($chartcenterx+$arcx),floor($chartcentery+$arcy),$currentcolor,$currentcolor);}imagearc($image,$chartcenterx,$chartcentery,$chartdiameter,$chartdiameter,0,360,$colorborder);imagefilltoborder($image,floor($chartcenterx+($chartdiameter/2)+2),$chartcentery,$colorborder,$colorborder);for($i=0;$i{$currentcolor=$colorslice[$i%(count($colorslice))];$liney=$chartdiameter+20+($i*($chartfontheight+2));imagerectangle($image,10,$liney,20+$chartfontheight,$liney+$chartfontheight,$colorbody);imagefilltoborder($image,12,$liney+2,$colorbody,$currentcolor);imagestring($image,$chartfont,40+$chartfontheight,$liney,"$chartlabel[$i]:$chartdata[$i]",$colortext);}imagegif($image,$file);}functionradians($degrees){return($degrees*(pi()/180.0));}functioncircle_point($degrees,$diameter){$x=cos(radians($degrees))*($diameter/2);$y=sin(radians($degrees))*($diameter/2);return(array($x,$y));}?>

下面是给出的使用上面函数进行绘制饼图的例子。

###########这是一个调用的例子###########include("bfunc.php3");$chartdiameter=250;$chartfont=5;$d1=10;$d2=20;$d3=30;$d4=40;$d5=50;$chartdata=array($d1,$d2,$d3,$d4,$d5);$chartlabel=array("D1","D2","D3","D4","D5");$colorbody=array(0xff,0xff,0xff);$colorborder=array(0x00,0x00,0x00);$colortext=array(0xff,0xff,0xff);$color1=array(0xff,0x00,0x00);$color2=array(0x00,0xff,0x00);$color3=array(0x00,0x00,0xff);$color4=array(0xff,0xff,0x00);$color5=array(0xff,0x00,0xff);$colorslice=array($color1,$color2,$color3,$color4,$color5);$file="tj.gif"bimage($chartdata,$chartfont,$chartdiameter,$chartlabel,$colorslice,$colorbody,$colorborder,$colortext,$file)?>

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章