Publié le 21/10/2010
Auteur fobec
Réseaux sociaux
0 partages
0 tweets
0 plus
0 commentaires

Afficher un graphique histogramme avec GD

La librairie GD contient un ensemble de fonctions pour générer des images à la volée. Les formats courants sont supportés gif, jpg et png, les images sont le plus souvent directement affichées dans le navigateur.

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 navigateur

gd_graph
Pour 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.

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
php5 - class
Mise a jour
21/10/2010
Visualisation
vu 6463 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 267 articles
|BIO_PSEUDO|
Commentaires récents

Publié par fobec dans CMS

fff - f,f,fklmf @@ f,kflf,k ??? !!! fff f f insert

Publié par Marmz dans java

Super ! pile ce que je cherchais , merci Mr Fobec

Publié par Laurent dans java

Merci :)
Teste sous Linux CentOS, fonctionne mais ne recouvre pas la barre des taches.

Publié par MeepMeep dans tuto

Attention, un petit correctif a apporter :
headerContent-type: $header_contenttype charset: UTF-8
Remplacer charset: UTF-8 par charsetUTF-8
La difference est subtile mais susceptible d'etre m...

Publié par Fobec dans tuto

Pour la distribution Linux Mint 12 Lisa, saisir dans le terminal:
# sudo service lightdm restart