Des graphiques paramétrables

Contenu du snippet

pour faire des p'tits graphiques avec des belles barres.
pour appeler le graphique, on fait :
<img src=graph.php>

la page graph.php contient ...

Source / Exemple :


<?
// Les valeurs en abscisse (attention, incrémentez les valeurs de 1 en 1, ne passez pas de 4 à 6 par exemple, et commencez par 0)

$x[0] = "lun";
$x[1] = "mar";
$x[2] = "mer";
$x[3] = "jeu";
$x[4] = "ven";
$x[5] = "sam";
$x[6] = "dim";

// ou $x = array("lun","mar","mer","jeu","ven","sam","dim");

// Les valeurs en ordonnée (attention, incrémentez les valeurs de 1 en 1, ne passez pas de 4 à 6 par exemple, et commencez par 0)

$y[0] = 12;
$y[1] = 5;
$y[2] = 21;
$y[3] = 7;
$y[4] = 2;
$y[5] = 15;
$y[6] = 18;

// ou $y = array(12, 5, 21, 7, 2, 15, 18);

// Espace entre les barres
$barres_espace = 16;

// Largeur des barres
$barres_largeur = 8;

// Hauteur de la barre la plus grande
$barres_hauteur = 75;

// Afficher la ligne de moyenne
$afficher_moyenne = 1;

// Afficher les lignes de niveau
$afficher_lignes = 0;

// Intensité du dégradé de couleurs (entre 0 et 100, 100 = intensité maximale, 0 = intensité minimale)
$dégradé_intensité = 100;

/*

Zone de création de l'image, vous y faîtes ce que vous voulez...
Vous pouvez par exemple modifier les couleurs, etc.
À vos risques et périls (si vous êtes débutant en PHP)...

  • /
function blanc($valeur,$taille) { for($i = 1; $i < $taille; $i++) { if($valeur < pow(10,$i)) { $ligne .= " "; } } return $ligne; } $nombre = count($y); $somme = array_sum($y); $moyenne = $somme/$nombre; $maximum = max($y); $minimum = min($y); $taille = strlen($maximum); $largeur = 30+$taille*6+$barres_largeur*$nombre+$barres_espace*($nombre-0.5); $hauteur = $barres_hauteur+32; $image = imagecreate($largeur,$hauteur); $blanc = imagecolorallocate($image,255,255,255); $noir = imagecolorallocate($image,0,0,0); $couleur_niveau = imagecolorallocate($image,220,200,220); $couleur_moyenne = imagecolorallocate($image,180,180,220); imagefilledrectangle($image,0,0,$largeur,$hauteur,$blanc); imagecolortransparent($image,$blanc); if($dégradé_intensité > 100) { $dégradé_intensité = 100; } $abscisse = $taille*5+20; $dégradé = round($dégradé_intensité/$nombre); $couleur = 150; for($i = 0; $i < $nombre; $i++) { unset($ordonnée); if($maximum) { $ordonnée = $barres_hauteur+8-$y[$i]/$maximum*$barres_hauteur; } if(!$ordonnée) { $ordonnée = $barres_hauteur+8; } if($i <= $nombre/2) { $couleur -= $dégradé; } else { $couleur += $dégradé; } $barres = imagecolorallocate($image,0,0,$couleur); $ombre = imagecolorallocate($image,floor(140+$couleur/2),floor(140+$couleur/2),floor(150+$couleur/2)); imagesetpixel($image,$abscisse+2,$ordonnée-2,$ombre); imagesetpixel($image,$abscisse+2,$ordonnée-1,$ombre); imagesetpixel($image,$abscisse+1,$ordonnée-1,$ombre); imagesetpixel($image,$abscisse+$barres_largeur+2,$barres_hauteur+6,$ombre); imagesetpixel($image,$abscisse+$barres_largeur+1,$barres_hauteur+6,$ombre); imagesetpixel($image,$abscisse+$barres_largeur+1,$barres_hauteur+7,$ombre); imagefilledrectangle($image,$abscisse+3,$ordonnée-3,$abscisse+$barres_largeur+3,$barres_hauteur+5,$ombre); imagefilledrectangle($image,$abscisse,$ordonnée,$abscisse+$barres_largeur,$barres_hauteur+8,$barres); imagestring($image,2,$abscisse+$barres_largeur/2-strlen($x[$i])*2.5+1,$barres_hauteur+15,$x[$i],$noir); $abscisse += $barres_largeur+$barres_espace; } if($maximum) { imagestring($image,2,8,0,blanc($maximum,$taille).$maximum,$noir); if($maximum > 1) { if(round($maximum/2) > $maximum/2) { $valeur = floor($maximum/2); } else { $valeur = ceil($maximum/2); } imagestring($image,2,8,round($maximum/2)/$maximum*$barres_hauteur+1,blanc($valeur,$taille).$valeur,$noir); } if($maximum > 2) { if(round(3*$maximum/4) > 3*$maximum/4) { $valeur = floor($maximum/4); } else { $valeur = ceil($maximum/4); } imagestring($image,2,8,round(3*$maximum/4)/$maximum*$barres_hauteur+1,blanc($valeur,$taille).$valeur,$noir); if(round($maximum/4) > $maximum/4) { $valeur = floor(3*$maximum/4); } else { $valeur = ceil(3*$maximum/4); } imagestring($image,2,8,round($maximum/4)/$maximum*$barres_hauteur+1,blanc($valeur,$taille).$valeur,$noir); } $début = $taille*5+20; $fin = $taille*5+$barres_largeur*$nombre+$barres_espace*$nombre-$barres_espace+20; if($afficher_lignes) { if($maximum > 1) { $ordonnée = round(round($maximum/2)/$maximum*$barres_hauteur+7); imageline($image,$début,$ordonnée,$fin,$ordonnée,$couleur_niveau); } if($maximum > 2) { $ordonnée = round(round(3*$maximum/4)/$maximum*$barres_hauteur+7); imageline($image,$début,$ordonnée,$fin,$ordonnée,$couleur_niveau); $ordonnée = round(round($maximum/4)/$maximum*$barres_hauteur+7); imageline($image,$début,$ordonnée,$fin,$ordonnée,$couleur_niveau); } } if($afficher_moyenne) { $ordonnée = round($barres_hauteur-$moyenne/$maximum*$barres_hauteur+7); imageline($image,$début,$ordonnée,$fin,$ordonnée,$couleur_moyenne); } } imagestring($image,2,8,$barres_hauteur+1,blanc(0,$taille)."0",$noir); imagepng($image); imagedestroy($image); header("Content-type: image/png"); ?>

Conclusion :


avec une petite image fournie pour montrer ce que ça donne

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.