Home > Article > Backend Development > Looking for a pie chart or bar chart php generation class or example
PHP code:------------------------------------------------ ----------------------------------
/*------------- -------------------------------------------------- ----------*/
//
// Module Name: A 3D pie chart class
//
// Author:Avenger(avenger@php.net) Last Modify: 2002-10- 30 11:19
// Copyright (c) 2002 by Avenger
/*--------------------------------- ----------------------------------------*/
//Public function part
//Convert angles to radians
function deg2Arc($degrees) {
return($degrees * (pi()/180.0));
}
//RGB
function getRGB($color){
$R= ($color>>16) & 0xff;
$G=($color>>8) & 0xff;
$B=($color) & 0xff;
return (array($R,$G,$B ); $deg)) * $va;
$y= sin(deg2Arc($deg)) * $vb;
return (array($x, $y));
}
//3D pie chart class
class Pie3d{
var $a; //Major semi-axis of ellipse
var $b; //Minor semi-axis of ellipse
var $DataArray; //Data of each sector
var $ColorArray; //Color of each sector It is required to be written in hexadecimal but not preceded by 0x
var $Fize; //Font size
//The edges and shadows are black
function Pie3d($pa=60,$pb=30,$sData="100,200,300,400,500 ", $sColor="ee00ff,dd0000,cccccc,ccff00,00ccff",$fontsize=1) {
$this->a=$pa;
$this->b=$pb;
$this-> ;DataArray=split(",",$sData);
$this->ColorArray=split(",",$sColor);
$this->Fsize=$fontsize;
}
function setA($ v){
$this->a=$v;
}
function getA(){
return $this->a;
}
function setB($v){
$this->b =$v;
}
function getB(){
return $this->b;
}
function setDataArray($v){
$this->DataArray=split(",",$v) ;
}
function getDataArray($v){
return $this->DataArray;
}
function setColorArray($v){
$this->ColorArray=split(",",$v);
}
function getColorArray(){
return $this->ColorArray;
}
function DrawPie(){
$fsize=$this->Fsize;
$image=imagecreate($this-> a*2+40,$this->b*2+40);
$PieCenterX=$this->a+10;
$PieCenterY=$this->b+10;
$DoubleA=$this ->a*2;
$DoubleB=$this->b*2;
list($R,$G,$B)=getRGB(0);
$colorBorder=imagecolorallocate($image,$R, $G,$B);
$DataNumber=count($this->DataArray);
//$DataTotal
for($i=0;$i<$DataNumber;$i++) $DataTotal+=$this- >DataArray[$i]; //Calculate the data and
//Fill the background
imagefill($image, 0, 0, imagecolorallocate($image, 255, 255, 255));
/*
** Draw Each sector
*/
$Degrees = 0;
for ($i = 0; $i < $DataNumber; $i++) {
$StartDegrees = round($Degrees);
$Degrees += (($ this->DataArray[$i]/$DataTotal)*360);
$EndDegrees = round($Degrees);
$percent = number_format($this->DataArray[$i]/$DataTotal*100, 1 );
list($R,$G,$B)=getRGB(hexdec($this->ColorArray[$i]));
$CurrentColor=imagecolorallocate($image,$R,$G,$B) ;
if ($R>60 and $R<256) $R=$R-60;
if ($G>60 and $G<256) $G=$G-60;
if ($B>60 and $B<256) $B=$B-60;
$CurrentDarkColor=imagecolorallocate($image,$R,$G,$B);
//Draw a fan-shaped arc
imagearc($image,$PieCenterX,$ PieCenterY,$DoubleA,$DoubleB,$StartDegrees,$EndDegrees,$CurrentColor);
//Draw a straight line
list($ArcX, $ArcY) = pie_point($StartDegrees, $this->a, $this-> ;b);
imageline($image,$PieCenterX,$PieCenterY,floor($PieCenterX + $ArcX),floor($PieCenterY + $ArcY),$CurrentColor);
//Draw a straight line
list($ArcX, $ArcY) = pie_point($EndDegrees,$this->a , $this->b);
imageline($image,$PieCenterX,$PieCenterY,ceil($PieCenterX + $ArcX),ceil($PieCenterY + $ArcY),$CurrentColor);
//Fill the sector
$MidPoint = round((($EndDegrees - $StartDegrees)/2) + $StartDegrees);
list($ArcX, $ArcY) = Pie_point($MidPoint , $this->a*3/4 , $this->b*3/4);
imagefilltoborder($image,floor($PieCenterX + $ArcX),floor($PieCenterY + $ArcY),$ CurrentColor,$CurrentColor);
imagestring($image,$fsize,floor($PieCenterX + $ArcX-5),floor($PieCenterY + $ArcY-5),$percent."%",$colorBorder);
//Draw shadow
if ($StartDegrees>=0 and $StartDegrees<=180){
if($EndDegrees<=180){
for($k = 1; $k < 15; $k++)
imagearc( $image,$PieCenterX, $PieCenterY+$k,$DoubleA, $DoubleB, $StartDegrees, $EndDegrees, $CurrentDarkColor);
}else{
for($k = 1; $k < 15; $k++)
imagearc ($image,$PieCenterX, $PieCenterY+$k,$DoubleA, $DoubleB, $StartDegrees, 180, $CurrentDarkColor);
}
}
}
//Output the generated image
imagepng($image,'consture.png');
imagedestroy($image);
}//End drawPie()
}//End class
$pie = new Pie3d;
$pie->Pie3d($pa=300,$pb=150,$sData="100,200,300,400,500", $sColor="ee00ff,dd0000,cccccc,ccff00,ddddaa",$fontsize=5);
$pie->DrawPie();
echo '';
?>