Script to 3D pie chart with PHP

Pie Chart 
 

Here you can try out some of the variations:

Parts:
Text:
  (Parts separated by: *) Forklaring
Show:
Form of label:
Width: pixels
Background color:  Choose background-color...
Text color:  Choose background-color...
Height of shadow: pixels
Color of shadow:
Required from PHP-installation:
This script requires GD 2.0.1 or later to be installed on your webserver. Help
This script requires JPG Support enabled. Help

  Start by saving the PHP script in a file. In the script you can make the following changes:

You can change whether to show labels, percentages, texts, parts...
You can choose the format of the labels ('square' or 'round')...
You can change the width of the pie chart...
You can change the background-color of the chart as well...
You can change the text-color...
The colors of the various slices are in an array, which can be changed...
The height on the shadow can be changed.
If true: The shadow is dark, or false: The shadow is light.

<?php
////////////////////////////////////////////////////////////////
// PHP script made by Rasmus - http://www.peters1.dk //
////////////////////////////////////////////////////////////////

$show_label = true; // true = show label, false = don't show label.
$show_percent = true; // true = show percentage, false = don't show percentage.
$show_text = true; // true = show text, false = don't show text.
$show_parts = false; // true = show parts, false = don't show parts.
$label_form = 'square'; // 'square' or 'round' label.
$width = 199;
$background_color = 'FFFFFF'; // background-color of the chart...
$text_color = '000000'; // text-color.
$colors = array('003366', 'CCD6E0', '7F99B2','F7EFC6', 'C6BE8C', 'CC6600','990000','520000','BFBFC1','808080'); // colors of the slices.
$shadow_height = 16; // Height on shadown.
$shadow_dark = true; // true = darker shadow, false = lighter shadow...

// DON'T CHANGE ANYTHING BELOW THIS LINE...

$data = $_GET["data"];
$label = $_GET["label"];

$height = $width/2;
$data = explode('*',$data);

if ($label != '') $label = explode('*',$label);

for ($i = 0; $i < count($label); $i++) 
{
	if ($data[$i]/array_sum($data) < 0.1) $number[$i] = ' '.number_format(($data[$i]/array_sum($data))*100,1,',','.').'%';
	else $number[$i] = number_format(($data[$i]/array_sum($data))*100,1,',','.').'%';
	if (strlen($label[$i]) > $text_length) $text_length = strlen($label[$i]);
}

if (is_array($label))
{
	$antal_label = count($label);
	$xtra = (5+15*$antal_label)-($height+ceil($shadow_height));
	if ($xtra > 0) $xtra_height = (5+15*$antal_label)-($height+ceil($shadow_height));
	
	$xtra_width = 5;
	if ($show_label) $xtra_width += 20;
	if ($show_percent) $xtra_width += 45;
	if ($show_text) $xtra_width += $text_length*8;
	if ($show_parts) $xtra_width += 35;
}

$img = ImageCreateTrueColor($width+$xtra_width, $height+ceil($shadow_height)+$xtra_height);

ImageFill($img, 0, 0, colorHex($img, $background_color));

foreach ($colors as $colorkode) 
{
	$fill_color[] = colorHex($img, $colorkode);
	$shadow_color[] = colorHexshadow($img, $colorkode, $shadow_dark);
}

$label_place = 5;

if (is_array($label))
{
	for ($i = 0; $i < count($label); $i++) 
	{
		if ($label_form == 'round' && $show_label  && $data[$i] > 0)
		{
			imagefilledellipse($img,$width+11,$label_place+5,10,10,colorHex($img, $colors[$i % count($colors)]));
			imageellipse($img,$width+11,$label_place+5,10,10,colorHex($img, $text_color));
		}
		else if ($label_form == 'square' && $show_label && $data[$i] > 0)
		{	
			imagefilledrectangle($img,$width+6,$label_place,$width+16,$label_place+10,colorHex($img, $colors[$i % count($colors)]));
			imagerectangle($img,$width+6,$label_place,$width+16,$label_place+10,colorHex($img, $text_color));
		}

		if ($data[$i] > 0)
		{
			if ($show_percent) $label_output = $number[$i].' ';
			if ($show_text) $label_output = $label_output.$label[$i].' ';
			if ($show_parts) $label_output = $label_output.$data[$i];
		
			imagestring($img,'2',$width+20,$label_place,$label_output,colorHex($img, $text_color));
			$label_output = '';
		
			$label_place = $label_place + 15;
		}
	}
}
$centerX = round($width/2);
$centerY = round($height/2);
$diameterX = $width-4;
$diameterY = $height-4;

$data_sum = array_sum($data);

$start = 270;

for ($i = 0; $i < count($data); $i++) 
{
	$value += $data[$i];
	$end = ceil(($value/$data_sum)*360) + 270;
	$slice[] = array($start, $end, $shadow_color[$value_counter % count($shadow_color)], $fill_color[$value_counter % count($fill_color)]);
	$start = $end;
	$value_counter++;
}

for ($i=$centerY+$shadow_height; $i>$centerY; $i--) 
{
	for ($j = 0; $j < count($slice); $j++)
	{
		if ($slice[$j][0] != $slice[$j][1]) ImageFilledArc($img, $centerX, $i, $diameterX, $diameterY, $slice[$j][0], $slice[$j][1], $slice[$j][2], IMG_ARC_PIE);
	}
}	

for ($j = 0; $j < count($slice); $j++)
{
	if ($slice[$j][0] != $slice[$j][1]) ImageFilledArc($img, $centerX, $centerY, $diameterX, $diameterY, $slice[$j][0], $slice[$j][1], $slice[$j][3], IMG_ARC_PIE);
}

OutputImage($img);
ImageDestroy($img);


function colorHex($img, $HexColorString) 
{
	$R = hexdec(substr($HexColorString, 0, 2));
	$G = hexdec(substr($HexColorString, 2, 2));
	$B = hexdec(substr($HexColorString, 4, 2));
	return ImageColorAllocate($img, $R, $G, $B);
}

function colorHexshadow($img, $HexColorString, $mork) 
{
	$R = hexdec(substr($HexColorString, 0, 2));
	$G = hexdec(substr($HexColorString, 2, 2));
	$B = hexdec(substr($HexColorString, 4, 2));

	if ($mork)
	{
		($R > 99) ? $R -= 100 : $R = 0;
		($G > 99) ? $G -= 100 : $G = 0;
		($B > 99) ? $B -= 100 : $B = 0;
	}
	else
	{
		($R < 220) ? $R += 35 : $R = 255;
		($G < 220) ? $G += 35 : $G = 255;
		($B < 220) ? $B += 35 : $B = 255;				
	}			
	
	return ImageColorAllocate($img, $R, $G, $B);
}

function OutputImage($img) 
{
	header('Content-type: image/jpg');
	ImageJPEG($img,NULL,100);
}

?>

 You can now include the chart just by calling the script like a picture, with parts and labels as attributes:

<img src="http://www.domain.dk/piechart.php?data=10*9*11*10&label=Denmark*Germany*USA*Sweden" />

 

Could You use this script? Please donate a little amount...



...to the development of more scripts :-)
Script til 3D Cirkeldiagram med PHP

Script to 3D pie chart with PHP

Script zum 3D Kreis-diagramm mit PHP

Denne side på dansk Script til 3D Cirkeldiagram med PHP
Diese Seite auf Deutsch Script zum 3D Kreis-diagramm mit PHP
 
Front page Read/sign my guestbook Sitemap Send mail   Bookmark and Share
Valid XHTML 1.0!