Home  >  Article  >  Backend Development  >  PHP generates pie chart three-dimensional pie chart_PHP tutorial

PHP generates pie chart three-dimensional pie chart_PHP tutorial

WBOY
WBOYOriginal
2016-07-21 15:43:58926browse

Pie chart

Copy code The code is as follows:

//+------ ------------------+
//| pie3dfun.PHP//Public functions|
//+---------- -------------+
define("ANGLE_STEP", 3); //Define the angle step when drawing an elliptical arc
define("FONT_USED", "C:WINDOWSFontssimhei .ttf"); //The location of the font file used
function draw_getdarkcolor($img,$clr) //Find the dark color corresponding to $clr
{
$rgb = imagecolorsforindex($img,$clr );
return array($rgb["red"]/2,$rgb["green"]/2,$rgb["blue"]/2);
}
function draw_getexy($ a, $b, $d) //Find the point coordinates on the ellipse corresponding to angle $d
{
$d = deg2rad($d);
return array(round($a*Cos( $d)), round($b*Sin($d)));
}
function draw_arc($img,$ox,$oy,$a,$b,$sd,$ed,$ clr) //Elliptic arc function
{
$n = ceil(($ed-$sd)/ANGLE_STEP);
$d = $sd;
list($x0,$y0) = draw_getexy($a,$b,$d);
for($i=0; $i<$n; $i++)
{
$d = ($d+ANGLE_STEP)> $ed?$ed:($d+ANGLE_STEP);
list($x, $y) = draw_getexy($a, $b, $d);
imageline($img, $x0+$ox, $y0+$oy, $x+$ox, $y+$oy, $clr);
$x0 = $x;
$y0 = $y;
}
}
function draw_sector ($img, $ox, $oy, $a, $b, $sd, $ed, $clr) //Draw a fan
{
$n = ceil(($ed-$sd)/ANGLE_STEP );
$d = $sd;
list($x0,$y0) = draw_getexy($a, $b, $d);
imageline($img, $x0+$ox, $y0+ $oy, $ox, $oy, $clr);
for($i=0; $i<$n; $i++)
{
$d = ($d+ANGLE_STEP)> $ed?$ed:($d+ANGLE_STEP);
list($x, $y) = draw_getexy($a, $b, $d);
imageline($img, $x0+$ox, $y0+$oy, $x+$ox, $y+$oy, $clr);
$x0 = $x;
$y0 = $y;
}
imageline($img, $ x0+$ox, $y0+$oy, $ox, $oy, $clr);
list($x, $y) = draw_getexy($a/2, $b/2, ($d+$sd)/ 2);
imagefill($img, $x+$ox, $y+$oy, $clr);
}
function draw_sector3d($img, $ox, $oy, $a, $b, $v, $sd, $ed, $clr) //3d sector
{
draw_sector($img, $ox, $oy, $a, $b, $sd, $ed, $clr);
if($sd<180)
{
list($R, $G, $B) = draw_getdarkcolor($img, $clr);
$clr=imagecolorallocate($img, $ R, $G, $B);
if($ed>180) $ed = 180;
list($sx, $sy) = draw_getexy($a,$b,$sd);
$sx += $ox;
$sy += $oy;
list($ex, $ey) = draw_getexy($a, $b, $ed);
$ex += $ ox;
$ey += $oy;
imageline($img, $sx, $sy, $sx, $sy+$v, $clr);
imageline($img, $ex, $ ey, $ex, $ey+$v, $clr);
draw_arc($img, $ox, $oy+$v, $a, $b, $sd, $ed, $clr);
list ($sx, $sy) = draw_getexy($a, $b, ($sd+$ed)/2);
$sy += $oy+$v/2;
$sx += $ox;
imagefill($img, $sx, $sy, $clr);
}
}
function draw_getindexcolor($img, $clr) //RBG to index color
{
$R = ($clr>>16) & 0xff;
$G = ($clr>>8)& 0xff;
$B = ($clr) & 0xff;
return imagecolorallocate ($img, $R, $G, $B);
}
// Draw the main function and output the picture
// $datLst is the data array, $datLst is the label array, $datLst is Color array
//The dimensions of the above three arrays should be equal
function draw_img($datLst,$labLst,$clrLst,$a=200,$b=90,$v=20,$font=10 )
{
$ox = 5+$a;
$oy = 5+$b;
$fw = imagefontwidth($font);
$fh = imagefontheight($font) ;
$n = count($datLst);//Number of data items
$w = 10+$a*2;
$h = 10+$b*2+$v+($fh +2)*$n;
$img = imagecreate($w, $h);
//Convert RGB to index color
for($i=0; $i<$n; $i++ )
$clrLst[$i] = draw_getindexcolor($img,$clrLst[$i]);
$clrbk = imagecolorallocate($img, 0xff, 0xff, 0xff);
$clrt = imagecolorallocate( $img, 0x00, 0x00, 0x00);
//Fill the background color
imagefill($img, 0, 0, $clrbk);
//Sum
$tot = 0;
for($i=0; $i<$n; $i++)
$tot += $datLst[$i];
$sd = 0;
$ed = 0;
$ly = 10+$b*2+$v;
for($i=0; $i<$n; $i++)
{
$sd = $ed;
$ ed += $datLst[$i]/$tot*360;
//Draw a round cake
draw_sector3d($img, $ox, $oy, $a, $b, $v, $sd, $ ed, $clrLst[$i]); //$sd,$ed,$clrLst[$i]);
//Draw label
imagefilledrectangle($img, 5, $ly, 5+$fw , $ly+$fh, $clrLst[$i]);
imagerectangle($img, 5, $ly, 5+$fw, $ly+$fh, $clrt);
//imagestring($img , $font, 5+2*$fw, $ly, $labLst[$i].":".$datLst[$i]."(".(round(10000*($datLst[$i]/$ tot))/100)."%)", $clrt);
$str = iconv("GB2312", "UTF-8", $labLst[$i]);
ImageTTFText($img, $font, 0, 5+2*$fw, $ly+13, $clrt, FONT_USED, $str.":".$datLst[$i]."(".(round(10000*($datLst[$ i]/$tot))/100)."%)");
$ly += $fh+2;
}
//Output graphics
header("Content-type: image/png");
//Output the generated image
imagepng($img);
}
$datLst = array(30, 20, 20, 20, 10, 20, 10, 20); //Data
$labLst = array("Zhejiang Province", "Guangdong Province", "Shanghai City", "Beijing City", "Fujian Province", "Jiangsu Province", "Hubei Province", " Anhui Province"); //Tag
$clrLst = array(0x99ff00, 0xff6666, 0x0099ff, 0xff99ff, 0xffff99, 0x99ffff, 0xff3333, 0x009999);
//Draw_img($datLst,$labL st, $clrLst);
?>


/upload/20090928204252867.jpg

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/320667.htmlTechArticleThe pie chart copy code is as follows: ?php //+------------ ------------+ //| pie3dfun.PHP//Public functions| //+----------------------- -+ define("ANGLE_STEP", 3); //Define the angle when drawing an elliptical arc...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn