手机版学校入驻客服中心网站导航

欢迎来到南宁IT培训学校!

咨询热线

在php绘制饼图的方法

来源:南宁IT培训学校    时间:2022/3/25 17:47:26

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

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

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

  给出的实例分为两部分:

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

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

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

  ########

  bimage.php3

  ########

  /*

  函数说明

  $chartdata:数据,是数组元素

  $chartfont:字号

  $chartdiameter:决定饼的大小(要看你饿不饿了,呵呵)

  $chartlabel:标题,也是数组元素

  $colorslice:颜色数组,例如$tmp=array255,255,255);$colorslic=array($tmp);

  $colorborder:边框颜色,数组

  $colortext:文本颜色,数组

  $colorbody:背景颜色,数组

  $file:输出图片文件名*/

  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));

  }

  ?>

联系方式

选择专业时,如果犹豫不定,不知道选择哪个比较好,敬请致电,专业的咨询老师会为你解答。

  • 报名热线:400-6263-721
  • 咨询老师:吴老师
  • 点击咨询:
开课专业

常见问题

没有想要的答案?马上提问

友情链接: [南亚视点电脑学校]

电脑版|手机版

版权所有: 郑州天华信息技术有限公司