饼状图

 

 

 

<?php
$array=$_POST['array']; //接收所有的值并存入数组$array中
$options=array('伙食','住房','交通','通信','其他'); //定义存放选项的数组$options
$image=imagecreatetruecolor(400,400);
imagefill($image,0,0, imagecolorallocate($image,255,255,255)); //背景颜色设为白色
$black=imagecolorallocate($image,0,0,0);
$x=200;$y=200; //圆心的坐标
$w=360;$h=360; //圆的宽和高,即半径为180
$i=0; //存放初始角度为0,在3点钟位置
$sum=0; //存放总数据量
$temp=0;
$font="C:/Windows/Fonts/simfang.ttf"; //字体文件,仿宋体
foreach($array as $value)
{
$sum=$sum+$value; //计算总数据量
}
for($k=0;$k<count($array);$k++) //遍历数组$array
{
$temp=$temp+$array[$k]; //中间数据
//圆盘中的每条分界线所在的角度赋到数组$points中
$points[$k]=($temp/$sum)*360;
$percent[$k]=number_format(($array[$k]/$sum)*100,1); //计算每组数据占总数据的百分比
if($k==0)
{
//如果是数组$array的第一组数据
$startdegrees=$i; //起始角度设为0
$enddegrees=$points[$k]; //终点角度为第一条分界线所在角度
}
else
{
//如果不是数组$array的第一组数据
$startdegrees=$points[$k-1]; //起始角度为前一条分界线的角度
$enddegrees=$points[$k]; //终点角度为下一条分界线的角度
}
$midpoints=$startdegrees+($enddegrees-$startdegrees)/2; //计算画出的扇形中心线所在角度
$radian=$midpoints*pi()/180; //将角度转化为弧度
//随机产生颜色
$color=imagecolorallocate($image,rand(0,255),rand(0,255),rand(0,255));
//使用随机颜色画圆弧
imagefilledarc($image, $x, $y, $w, $h, $i, $points[$k], $color, IMG_ARC_PIE);
//对要在圆盘中输入的中文进行编码
//$codetext=iconv("GB2312","UTF-8",$options[$k].$percent[$k]."%");

$codetext=iconv("UTF-8","UTF-8",$options[$k].$percent[$k]."%");


if($midpoints>=90&&$midpoints<=270)
{
//如果中心线处于左半圆则从中心线3/4处的点开始输入
$mid_x=(cos($radian)*$w/2)*3/4+$x;
$mid_y=(sin($radian)*$h/2)*3/4+$y;
$angle=180-$midpoints; //文字的偏斜角度
}
else
{
//如果中心线处于右半圆则从中心线1/2处的点开始输入
$mid_x=(cos($radian)*$w/2)/2+$x;
$mid_y=(sin($radian)*$h/2)/2+$y;
$angle=360-$midpoints;
}
//在圆盘的扇形中以角度$angle输入$codetext中的内容
imagettftext($image, 12, $angle,$mid_x,$mid_y, $black, $font, $codetext);
$i=$points[$k]; //重新定义起始角度
}
$file="../good/image/EX5_7.gif"; //定义一个文件名
imagegif($image,$file); //将图像保存为EX5_7.gif文件
echo "<font face='黑体' size='5' color='blue'>生活费用百分比分布图:</font><br/>";
echo "<img src=$file>"; //输出图片
imagedestroy($image);
?>

 

 

2.建议使用流程图,梳理下该段程序。会更加易于阅读

https://www.processon.com/setting

posted @ 2017-02-26 12:26  feiyun8616  阅读(208)  评论(0编辑  收藏  举报