Création d'une image de statistique : le camembert

Contenu du snippet

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); /*
    • Dessiner chaque portion
  • /
$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>'; } ?>

A voir également

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.