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

Publié par max dans java

est que ce framework fonctionne pour une application web ?

Publié par brayan dans logiciel

je vous retour modem ip pour configury net firwell

Publié par romainN dans tuto

Bonjour,

Super tuto bravo! Je suis sur Wordpress 3.5 et 1and1 et la ligne HTML que je dois modifier est prsente dans plusieurs php et elle comprend des echo:

echo \\ dans le fichier wp-...

Publié par Fobec dans tuto

Bonjour,
est-ce que l'ecart entre 2 mesures est important ?
Un serveur web est loin d'une horloge suisse ;-) En fonction de la charge du serveur, de la mise en cache et du contenu du scr...

Publié par Connan dans php5

j'utilise mysql phpmyadmin et j'ai cree une table IP mais j'ai mis varchart(15) mais quese qui faut que je fasse pour stocker l'ip des joueurs qui s'inscrivent