Un petit camembert parametrable pour les stats ;)
(parametrables :
?id1=nb1&id2=nb2&id3=nb3&id4=nb4&id5=nb5&pid1=nom1&pid2=nom2&pid3=nom3&pid4=nom4&pid5=nom5 )
Source / Exemple :
<?
if(isset($_GET['id1']) && isset($_GET['id2']) && isset($_GET['id3']) && isset($_GET['id4']) && isset($_GET['id5']) && isset($_GET['pid1']) && isset($_GET['pid2']) && isset($_GET['pid3']) && isset($_GET['pid4']) && isset($_GET['pid5']))
{
/*
- Graphique sectoriel au format GIF
- /
/*
- Convertir les degrés en radians
- /
function radians($degrees)
{
return($degrees * (pi()/180.0));
}
/*
- prendre x,y dans le cercle,
- centre = 0,0
- /
function circle_point($degrees, $diameter)
{
$x = cos(radians($degrees)) * ($diameter/2);
$y = sin(radians($degrees)) * ($diameter/2);
return (array($x, $y));
}
//remplir les paramètres
$ChartDiameter = 300;
$ChartFont = 5;
$ChartFontHeight = imagefontheight($ChartFont);
$ChartData = array($_GET['id1'], $_GET['id2'],
$_GET['id3'], $_GET['id4'], $_GET['id5']);
$ChartLabel = array($_GET['pid1'], $_GET['pid2'],
$_GET['pid3'], $_GET['pid4'], $_GET['pid5']);
//déterminer la taille du graphique
$ChartWidth = $ChartDiameter + 20;
$ChartHeight = $ChartDiameter + 20 +
(($ChartFontHeight + 2) * count($ChartData));
$ChartTotal = "";
//détermine le total de toutes les valeurs
for($index = 0; $index < count($ChartData); $index++)
{
$ChartTotal += $ChartData[$index];
}
$ChartCenterX = $ChartDiameter/2 + 10;
$ChartCenterY = $ChartDiameter/2 + 10;
//image
$image = imagecreate($ChartWidth, $ChartHeight);
//couleurs
$colorBody = imagecolorallocate($image, 0xFF, 0xFF, 0xFF);
$colorBorder = imagecolorallocate($image, 0x00, 0x00, 0x00);
$colorText = imagecolorallocate($image, 0x00, 0x00, 0x00);
$colorSlice[] = imagecolorallocate($image, 0xFF, 0x00, 0x00);
$colorSlice[] = imagecolorallocate($image, 0x00, 0xFF, 0x00);
$colorSlice[] = imagecolorallocate($image, 0x00, 0x00, 0xFF);
$colorSlice[] = imagecolorallocate($image, 0xFF, 0xFF, 0x00);
$colorSlice[] = imagecolorallocate($image, 0xFF, 0x00, 0xFF);
$colorSlice[] = imagecolorallocate($image, 0x00, 0xFF, 0xFF);
$colorSlice[] = imagecolorallocate($image, 0x99, 0x00, 0x00);
$colorSlice[] = imagecolorallocate($image, 0x00, 0x99, 0x00);
$colorSlice[] = imagecolorallocate($image, 0x00, 0x00, 0x99);
$colorSlice[] = imagecolorallocate($image, 0x99, 0x99, 0x00);
$colorSlice[] = imagecolorallocate($image, 0x99, 0x00, 0x99);
$colorSlice[] = imagecolorallocate($image, 0x00, 0x99, 0x99);
//arrière-plan
imagefill($image, 0, 0, $colorBody);
/*
$Degrees = 0;
for($index = 0; $index < count($ChartData); $index++)
{
$StartDegrees = round($Degrees);
$Degrees += (($ChartData[$index]/$ChartTotal)*360);
$EndDegrees = round($Degrees);
$CurrentColor = $colorSlice[$index%(count($colorSlice))];
//dessiner un arc
imagearc($image,
$ChartCenterX,
$ChartCenterY,
$ChartDiameter,
$ChartDiameter,
$StartDegrees,
$EndDegrees,
$CurrentColor);
//Tracer le début de la ligne à partir du centre
list($ArcX, $ArcY) = circle_point($StartDegrees, $ChartDiameter);
imageline($image,
$ChartCenterX,
$ChartCenterY,
floor($ChartCenterX + $ArcX),
floor($ChartCenterY + $ArcY),
$CurrentColor);
//dessiner la fin de la ligne
list($ArcX, $ArcY) = circle_point($EndDegrees, $ChartDiameter);
imageline($image,
$ChartCenterX,
$ChartCenterY,
ceil($ChartCenterX + $ArcX),
ceil($ChartCenterY + $ArcY),
$CurrentColor);
//remplir les portions
$MidPoint = round((($EndDegrees - $StartDegrees)/2) + $StartDegrees);
list($ArcX, $ArcY) = circle_point($MidPoint, $ChartDiameter/2);
imagefilltoborder($image,
floor($ChartCenterX + $ArcX),
floor($ChartCenterY + $ArcY),
$CurrentColor,
$CurrentColor);
}
//la bordure
imagearc($image,
$ChartCenterX,
$ChartCenterY,
$ChartDiameter,
$ChartDiameter,
0,
180,
$colorBorder);
imagearc($image,
$ChartCenterX,
$ChartCenterY,
$ChartDiameter,
$ChartDiameter,
180,
360,
$colorBorder);
imagearc($image,
$ChartCenterX,
$ChartCenterY,
$ChartDiameter+7,
$ChartDiameter+7,
0,
180,
$colorBorder);
imagearc($image,
$ChartCenterX,
$ChartCenterY,
$ChartDiameter+7,
$ChartDiameter+7,
180,
360,
$colorBorder);
imagefilltoborder($image,
floor($ChartCenterX + ($ChartDiameter/2) + 2),
$ChartCenterY,
$colorBorder,
$colorBorder);
//la légende
for($index = 0; $index < count($ChartData); $index++)
{
$CurrentColor = $colorSlice[$index%(count($colorSlice))];
$LineY = $ChartDiameter + 20 + ($index*($ChartFontHeight+2));
//la couleur des boîtes
imagerectangle($image,
10,
$LineY,
10 + $ChartFontHeight,
$LineY+$ChartFontHeight,
$colorBorder);
imagefilltoborder($image,
12,
$LineY + 2,
$colorBorder,
$CurrentColor);
//Les titres
imagestring($image,
$ChartFont,
20 + $ChartFontHeight,
$LineY,
"$ChartLabel[$index]: $ChartData[$index]",
$colorText);
}
//afficher l'image
header("Content-type: image/gif");
imagegif($image);
}else{
echo '<fieldset style="position:absolute;border-color:#0000FF;border:1 solid"><b>Une erreur c\'est produite lors de la création du graphique :<br><li><font color=red>Tout les Arguments ne sont pas spécifier</b></font></fieldset>';
}
?>
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.