Créer un graphique à la volée
La class HistoGraph est un exemple de génération d'un graphique de type histogramme:- function addValue(): ajouter les valeurs du graphique une à une. Cette méthode convient à une boucle sur le résultat d'une requete SQL,
- function draw(): initialiser le graphiquer puis dessiner chaque élément du graphique.
<?php
/**
* Afficher un graphique histogramme avec GD
* Fobec 2010
*/
class HistoGraph {
/** array des valeurs du graph */
private $rs=array();
/**
* Ajouter une valeur au graph à afficher
* @param int $val
*/
public function addValue($val) {
array_push($this->rs, $val);
}
/**
* Générer un histogramme
* @param int $width largeur
* @param int $height hauteur
*/
public function draw($width, $height) {
// Nombre de colonne à afficher
$columns=count($this->rs);
// Espacement entre les colonnes
$pad_column=10;
// Hauteur du cartouche au bas du graph
$pad_bottom=30;
// Calculer la largeur d'une colonne et allocation des couleurs
$column_width = $width / $columns ;
$im= imagecreate($width,$height);
$blue=imagecolorallocate ($im,0,102,255);
$gray=imagecolorallocate ($im,50,50,50);
$white=imagecolorallocate ($im,255,255,255);
// Remplir le fond en blanc
imagefilledrectangle($im,0,0,$width,$height,$white);
$maxv = 0;
// Déterminer la valeur maximale
for($i=0;$i<$columns;$i++) {
$maxv = max($this->rs[$i],$maxv);
}
// Dessiner le rectangle pour chaque valeur
for($i=0;$i<$columns;$i++) {
$column_height = ($height / 100) * (( $this->rs[$i] / $maxv) *100);
$x1 = $i*$column_width+$pad_column/2;
$y1 = $height-$column_height-$pad_bottom;
$x2 = (($i+1)*$column_width)-$pad_column+$pad_column/2;
$y2 = $height-$pad_bottom;
imagefilledrectangle($im,$x1,$y1,$x2,$y2,$blue);
}
// Ajouter une ligne
imageline($im, 0, $height-$pad_bottom, $width, $height-$pad_bottom, $gray);
//Ajouter du texte
imagestring($im, 10, 20, $height-$pad_bottom+10, 'Exemple histogramme fobec.com', $gray);
// Renseigner le header et envoyer l'image
header ("Content-type: image/png");
imagepng($im);
}
}
/**
* Exemple d'utilisation de la class
*/
$histoGraph=new HistoGraph();
//Ajouter les valeurs, en gal une boucle issue d'un requete SQL
$histoGraph->addValue(23);
$histoGraph->addValue(32);
$histoGraph->addValue(12);
$histoGraph->addValue(24);
$histoGraph->addValue(30);
$histoGraph->addValue(22);
$histoGraph->addValue(18);
// Afficher le graphique
$histoGraph->draw(300, 200);
?>
Exemple de graphique avec GD
A l'execution du script ci-dessous, l'image suivante s'affiche dans le navigateurPour créer un histogramme vite fait, sans intégrer d'API supplémentaire, la librairie GD permet de réaliser un graphique qui tient la route.