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 6441 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 267 articles
|BIO_PSEUDO|
Commentaires récents

Publié par Patrice dans CMS

Concernant la commande ShellExecute :

Si vous voulez lancer un programme dont le nom est contenu dans une propriété text,
caption, items bref d\'un string ... n'oubliez pas de tran...

Publié par fobec dans tuto

Pour le script fonctionne, renseigner les constantes $SITE_PATH et $CACHE_PATH. Remplacer les valeurs avec les chemins de son propre site.

Publié par vieux dans CMS

et comment ce le procurent ton ?

Publié par Franzi dans java

Bonjour,
Le code est simple et compile, après être entré dans public void connect, il n'effectue pas this.session.get.transport et s'arrête. Sous eclipse avec Tomcat, j'ob...

Publié par leflo dans php5

Bonjour
Sans parler du fait que l'IP peut ne pas vouloir dire grand chose, en cas de proxy/translation comment on fait? On voit pas et on interdit tout meme si l'utilisateur n'est pas responsa...