begin process at 2012 02 05 02:55:00
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > CLASSE DE GÉNÉRATION DE GRAPHIQUE

CLASSE DE GÉNÉRATION DE GRAPHIQUE


 Information sur la source

Note :
9,22 / 10 - par 9 personnes
9,22 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Class et Objet ( POO ) Niveau :Initié Date de création :08/06/2005 Date de mise à jour :15/06/2005 10:23:55 Vu :4 767

Auteur : cyberbenfr

Ecrire un message privé
Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Hop voilà ma première source :)

Donc pour mes besoins j'ai créé une classe qui me génère des graphiques (histogrammes) à partir de données récupérées dans une table MySQL.

Cette classe est assez spécifique par rapport à mes besoins mais le code peut toujours servir à certain :) Référez-vous à la capture pour vous donner une idée du résultat final.

N'hésitez pas à commenter le code et/ou à poser des questions.

Bye Bye ^^

PS: La classe SQL n'est par fournit mais je pense que vous comprendrez aisément le fonctionnement de celle-ci dans mon code.

Source

  • <?php
  • /* Librairie SQL nécessaire pour récupérer les données */
  • include_once("include/sql.class.inc");
  • /************************
  • ** LIBRAIRIE GRAPHIQUE **
  • ************************/
  • class Graphique
  • {
  • var $image = NULL; // variable de l'image
  • var $titre = NULL; // Titre du graphique
  • var $donnees = NULL; // Tableau[..] contenant les valeurs à traiter
  • var $max = NULL; // valeur maximale des données
  • var $norme = NULL; // Norme de l'analyse
  • var $format = NULL; // Format de l'image retourné (png, jpg ou gif)
  • var $taille_x = 600; // Largeur de l'image (défaut avec zoom 1 = 600)
  • var $taille_y = 330; // Hauteur de l'image (défaut avec zoom 1 = 330)
  • var $max_histo = 11; // Nombre maximal d'histogrammes pouvant être affiché
  • var $id_producteur = NULL; // id du producteur
  • var $id_produit = NULL; // id du type de produit analysé
  • var $id_analyse = NULL; // id du type d'analyse effectué
  • var $print_courbe = true; // Tracer la courbe ? true ou false
  • var $print_valeur = true; // Afficher les valeurs aux sommets des histogrammes ? true ou false
  • var $print_titre = true; // Afficher le titre du graphique ? true ou false
  • var $print_norme = true; // Afficher la norme ? true or false
  • /************
  • ** PRIVATE **
  • ************/
  • /* Initialisation */
  • function Init()
  • {
  • /* Vérification que la variable image n'est pas déjà initialisé à quelque chose */
  • if ( $this->image )
  • imagedestroy($this->image);
  • /* Initialise la variable image */
  • $this->image = imagecreate($this->taille_x, $this->taille_y);
  • }
  • /* Reset toutes les variables */
  • function Flush()
  • {
  • if ( $this->image )
  • imagedestroy( $this->image );
  • $this->image = NULL;
  • $this->donnees = NULL;
  • $this->zoom = NULL;
  • $this->max = NULL;
  • $this->norme = NULL;
  • }
  • /* Récupération des données à traiter dans la base de données */
  • /* Utilisation de la class SQL */
  • function GetDonnees()
  • {
  • if ( $this->donnees )
  • $this->donnees = NULL;
  • $mysql = new SQL();
  • $mysql->Connect();
  • $sql = $mysql->ExecQuery("SELECT DATE_FORMAT(date_analyse,'%d-%m-%Y') as date, resultat FROM analyses WHERE `type_produits#` = '$this->id_produit' AND `num_producteur#` = '$this->id_producteur' AND `num_type_analyse#` = '$this->id_analyse' ORDER BY date_analyse ASC");
  • if ( $this->donnees )
  • $this->donnees = NULL;
  • $this->donnees = array();
  • while( $data = mysql_fetch_array($sql) )
  • {
  • $this->donnees[] = array("date"=>$data[0], "resultat"=>$data[1]);
  • }
  • $mysql->Free();
  • $sql = $mysql->ExecQuery("SELECT norme_z_analyse FROM type_analyse WHERE num_type_analyse = '$this->id_analyse'");
  • $tuple = mysql_fetch_array($sql);
  • if ( $this->norme )
  • $this->norme = NULL;
  • $this->norme = $tuple["norme_z_analyse"];
  • $mysql->Disconnect();
  • unset($sql);
  • unset($mysql);
  • }
  • /* Retourne le plus grand des résultats à traiter */
  • function GetMax()
  • {
  • $this->max = 0;
  • $nb = count( $this->donnees ); /* Nombre de données à traiter */
  • for($i=0;$i<$nb;$i++)
  • {
  • if ( $this->donnees[$i]["resultat"] > $this->max )
  • {
  • $this->max = $this->donnees[$i]["resultat"];
  • }
  • }
  • if ( $this->norme > $this->max )
  • $this->max = $this->norme;
  • unset($nb);
  • }
  • /* Défini une couleur de fond pour l'image */
  • /* Couleur de fond par défaut : blanc */
  • function SetBackground($red=255,$green=255,$blue=255)
  • {
  • if ( !is_null($this->image) )
  • {
  • if ( is_int($red) && is_int($green) && is_int($blue) )
  • {
  • imagecolorallocate($this->image, $red, $green, $blue);
  • }
  • }
  • }
  • /* Poisitionne le titre du graphique et l'affiche */
  • function SetTitre()
  • {
  • if ( !is_null($this->image) )
  • {
  • $text_color = imagecolorallocate($this->image,0,0,0);
  • $text_x = ($this->taille_x-(strlen($this->titre)*imagefontwidth(3)))/2;
  • imagestring($this->image, 3, $text_x, 5, $this->titre, $text_color);
  • unset($text_x);
  • unset($text_color);
  • }
  • }
  • /* Trace les axes x et y et les bords */
  • function SetAxes()
  • {
  • if ( !is_null($this->image) )
  • {
  • $line_color = imagecolorallocate($this->image,0,0,0);
  • imageline($this->image, 80, 40, 80, 250, $line_color);
  • imageline($this->image, 80, 250, 550, 250, $line_color);
  • imageline($this->image, 0, 0, 0, $this->taille_y-1, $line_color);
  • imageline($this->image, 0, $this->taille_y-1, $this->taille_x-1, $this->taille_y-1, $line_color);
  • imageline($this->image, $this->taille_x-1, $this->taille_y-1, $this->taille_x-1, 0, $line_color);
  • imageline($this->image, $this->taille_x-1, 0, 0, 0, $line_color);
  • unset($line_color);
  • }
  • }
  • /* Trace les points horizontaux */
  • function SetXY()
  • {
  • $line_color = imagecolorallocate($this->image,0,0,0);
  • $text_color = imagecolorallocate($this->image,0,0,0);
  • $coord_x = 80; /* Coordonnée x de la position de l'axe Y */
  • $nb = count( $this->donnees ); /* Nombre de données à traiter */
  • // Trace les intervalles sur l'axe X et affiche les dates des zones */
  • for($i=0;$i<$nb;$i++)
  • {
  • imageline($this->image, $coord_x, 245, $coord_x, 255, $line_color);
  • $text_size = strlen($this->donnees[$i]["date"])*imagefontwidth(2);
  • $x = ((40-imagefontheight(2))/2)+$coord_x;
  • $y = 250 + $text_size + 5;
  • imagestringup($this->image, 2, $x, $y, $this->donnees[$i]["date"], $text_color);
  • $coord_x += 40;
  • }
  • /* Trace les intervalles sur l'axe Y et affiche l'échelle */
  • /* Seuls 5 points "référence" sont tracés sur l'axe Y */
  • for($i=0;$i<=5;$i++)
  • {
  • $text_y = ((210/5)*$i)+40;
  • $valeur = round(($this->max/5)*(5-$i),0); /* Pas de chiffre à virgule, que des entiers */
  • imageline($this->image,75,$text_y,85,$text_y,$line_color);
  • imagestring($this->image,2,50,($text_y-(imagefontheight(2)/2)),$valeur,$line_color);
  • }
  • unset($line_color);
  • unset($text_color);
  • unset($coord_x);
  • unset($text_size);
  • unset($x);
  • unset($y);
  • unset($valeur);
  • unset($text_y);
  • unset($nb);
  • }
  • /* Tracage des histogrammes */
  • function SetHistogramme()
  • {
  • $coord_x = 80;
  • $nb = count( $this->donnees ); /* Nombre de données à traiter */
  • $line_color = imagecolorallocate($this->image, 255, 0, 0);
  • $text_color = imagecolorallocate($this->image, 0, 0, 0);
  • for($i=0;$i<$nb;$i++)
  • {
  • /* Calcule de la coordonnée Y du haut de l'histogramme */
  • /* valeur_max <-> coord_max => y = (coord_max*valeur_x)/valeur_max */
  • $coord_y = (250*$this->donnees[$i]["resultat"])/$this->max;
  • if ( $coord_y == 250 )
  • $coord_y = 40;
  • else
  • $coord_y = (250-$coord_y)+40;
  • imagerectangle($this->image, $coord_x, $coord_y, $coord_x+40, 250, $line_color);
  • /* Affichage des valeurs au sommet des histogrammes */
  • if ( $this->print_valeur )
  • {
  • $text_x = $coord_x+((40-(strlen($this->donnees[$i]["resultat"])*imagefontwidth(1)))/2);
  • if ( $i != 0 && $i != count($this->donnees) )
  • {
  • if ( $this->donnees[$i-1]["resultat"] > $this->donnees[$i]["resultat"] && $this->donnees[$i+1]["resultat"] > $this->donnees[$i]["resultat"] )
  • $text_y = $coord_y+4;
  • else
  • $text_y = $coord_y-10;
  • }
  • else
  • {
  • $text_y = $coord_y-10;
  • }
  • imagestring($this->image, 1, $text_x, $text_y, $this->donnees[$i]["resultat"], $text_color);
  • }
  • $coord_x += 40;
  • }
  • unset($coord_x);
  • unset($coord_y);
  • unset($text_x);
  • unset($text_y);
  • unset($coord_zero);
  • unset($line_color);
  • unset($text_color);
  • unset($nb);
  • }
  • /* Trace la courbe d'évolution des analyses */
  • function TraceCourbe()
  • {
  • $coord_x = 80;
  • $nb = count( $this->donnees ); /* Nombre de données à traiter */
  • $line_color = imagecolorallocate($this->image, 0, 0, 255);
  • /* Parcours du tableau jusqu'à n-1 car on a besoin des valeur à l'indice i et i+1 */
  • for($i=0;$i<$nb-1;$i++)
  • {
  • $coord_y1 = (250*$this->donnees[$i]["resultat"])/$this->max;
  • $coord_y2 = (250*$this->donnees[$i+1]["resultat"])/$this->max;
  • if ( $coord_y1 == 250 )
  • $coord_y1 = 40;
  • else
  • $coord_y1 = (250-$coord_y1)+40;
  • if ( $coord_y2 == 250 )
  • $coord_y2 = 40;
  • else
  • $coord_y2 = (250-$coord_y2)+40;
  • imageline($this->image,$coord_x+20,$coord_y1,$coord_x+60,$coord_y2,$line_color);
  • $coord_x += 40;
  • }
  • unset($coord_x);
  • unset($coord_y1);
  • unset($coord_y2);
  • unset($line_color);
  • unset($nb);
  • }
  • /* Trace la droite représentant la norme */
  • function TraceNorme()
  • {
  • $color = imagecolorallocate($this->image, 0, 0, 0);
  • $line_color = imagecolorallocate($this->image, 0, 255, 0);
  • $coord_y = (250*$this->norme)/$this->max;
  • $coord_y = (250-$coord_y)+40;
  • $text_y = $coord_y-(imagefontheight(2)/2);
  • imageline($this->image, 75, $coord_y, 85, $coord_y, $color);
  • imagestring($this->image, 2, 50, $text_y, round($this->norme,0), $color);
  • imageline($this->image, 80, $coord_y, 550, $coord_y, $line_color);
  • unset($line_color);
  • unset($color);
  • unset($coord_y);
  • unset($text_y);
  • }
  • /***********
  • ** PUBLIC **
  • ***********/
  • /* Constructeur de la classe */
  • function Graphique($titre, $format="png", $print_courbe=true, $print_valeur=true, $print_titre=true, $print_norme=true, $red=255, $green=255, $blue=255, $id_analyse, $id_produit, $id_producteur)
  • {
  • $this->format = $format;
  • if ( $titre )
  • $this->titre = $titre;
  • $this->print_courbe = $print_courbe;
  • $this->print_valeur = $print_valeur;
  • $this->print_titre = $print_titre;
  • $this->print_norme = $print_norme;
  • $this->id_producteur = $id_producteur;
  • $this->id_analyse = $id_analyse;
  • $this->id_produit = $id_produit;
  • $this->Init();
  • $this->SetBackground($red, $green, $blue);
  • }
  • /* Génération du graphique */
  • function Generer()
  • {
  • $this->GetDonnees();
  • $this->GetMax();
  • $this->SetAxes();
  • $this->SetXY();
  • $this->SetHistogramme();
  • if ( $this->print_titre )
  • $this->SetTitre();
  • if ( $this->print_courbe )
  • $this->TraceCourbe();
  • if ( $this->print_norme )
  • $this->TraceNorme();
  • }
  • /* Affiche l'image */
  • function Afficher()
  • {
  • if ( $this->image )
  • {
  • switch( $this->format )
  • {
  • case "png":
  • header('Content-type: image/png');
  • imagepng($this->image);
  • break;
  • case "jpg":
  • header('Content-type: image/jpg');
  • imagejpeg($this->image);
  • break;
  • case "gif":
  • header("Content-type: image/gif");
  • imagegif($this->image);
  • break;
  • default:
  • header('Content-type: image/png');
  • imagepng($this->image);
  • break;
  • }
  • }
  • }
  • /* Sauvegarde l'image du graphique dans un fichier */
  • function Save( $filename )
  • {
  • if ( $this->image )
  • {
  • switch( $this->format )
  • {
  • case "png":
  • imagepng($this->image, $filename);
  • break;
  • case "jpg":
  • imagejpeg($this->image, $filename, 100);
  • break;
  • case "gif":
  • imagegif($this->image, $filename);
  • break;
  • default:
  • imagepng($this->image, $filename);
  • break;
  • }
  • }
  • }
  • }
  • ?>
<?php

/* Librairie SQL nécessaire pour récupérer les données */
include_once("include/sql.class.inc");

/************************
** LIBRAIRIE GRAPHIQUE **
************************/

class Graphique
{
    var $image      = NULL;     // variable de l'image

    var $titre      = NULL;     // Titre du graphique
    var $donnees    = NULL;     // Tableau[..] contenant les valeurs à traiter
    var $max        = NULL;     // valeur maximale des données
    var $norme      = NULL;     // Norme de l'analyse

    var $format     = NULL;     // Format de l'image retourné (png, jpg ou gif)

    var $taille_x   = 600;      // Largeur de l'image (défaut avec zoom 1 = 600)
    var $taille_y   = 330;      // Hauteur de l'image (défaut avec zoom 1 = 330)

    var $max_histo  = 11;       // Nombre maximal d'histogrammes pouvant être affiché

    var $id_producteur  = NULL; // id du producteur
    var $id_produit     = NULL; // id du type de produit analysé
    var $id_analyse     = NULL; // id du type d'analyse effectué

    var $print_courbe   = true; // Tracer la courbe ? true ou false
    var $print_valeur   = true; // Afficher les valeurs aux sommets des histogrammes ? true ou false
    var $print_titre    = true; // Afficher le titre du graphique ? true ou false
    var $print_norme    = true; // Afficher la norme ? true or false

    /************
    ** PRIVATE **
    ************/

    /* Initialisation */
    function Init()
    {
        /* Vérification que la variable image n'est pas déjà initialisé à quelque chose */
        if ( $this->image )
            imagedestroy($this->image);

        /* Initialise la variable image */
        $this->image = imagecreate($this->taille_x, $this->taille_y);
    }

    /* Reset toutes les variables */
    function Flush()
    {
        if ( $this->image )
            imagedestroy( $this->image );

        $this->image    = NULL;
        $this->donnees  = NULL;
        $this->zoom     = NULL;
        $this->max      = NULL;
        $this->norme    = NULL;
    }

    /* Récupération des données à traiter dans la base de données */
    /* Utilisation de la class SQL */
    function GetDonnees()
    {
        if ( $this->donnees )
            $this->donnees = NULL;

        $mysql = new SQL();

        $mysql->Connect();

        $sql = $mysql->ExecQuery("SELECT DATE_FORMAT(date_analyse,'%d-%m-%Y') as date, resultat FROM analyses WHERE `type_produits#` = '$this->id_produit' AND `num_producteur#` = '$this->id_producteur' AND `num_type_analyse#` = '$this->id_analyse' ORDER BY date_analyse ASC");

        if ( $this->donnees )
            $this->donnees = NULL;

        $this->donnees = array();

        while( $data = mysql_fetch_array($sql) )
        {
            $this->donnees[] = array("date"=>$data[0], "resultat"=>$data[1]);
        }

        $mysql->Free();

        $sql = $mysql->ExecQuery("SELECT norme_z_analyse FROM type_analyse WHERE num_type_analyse = '$this->id_analyse'");

        $tuple = mysql_fetch_array($sql);

        if ( $this->norme )
            $this->norme = NULL;

        $this->norme = $tuple["norme_z_analyse"];

        $mysql->Disconnect();

        unset($sql);
        unset($mysql);
    }

    /* Retourne le plus grand des résultats à traiter */
    function GetMax()
    {
        $this->max = 0;

        $nb = count( $this->donnees ); /* Nombre de données à traiter */

        for($i=0;$i<$nb;$i++)
        {
            if ( $this->donnees[$i]["resultat"] > $this->max )
            {
                $this->max = $this->donnees[$i]["resultat"];
            }
        }

        if ( $this->norme > $this->max )
            $this->max = $this->norme;

        unset($nb);
    }

    /* Défini une couleur de fond pour l'image  */
    /* Couleur de fond par défaut : blanc       */
    function SetBackground($red=255,$green=255,$blue=255)
    {
        if ( !is_null($this->image) )
        {
            if ( is_int($red) && is_int($green) && is_int($blue) )
            {
                imagecolorallocate($this->image, $red, $green, $blue);
            }
        }
    }

    /* Poisitionne le titre du graphique et l'affiche */
    function SetTitre()
    {
        if ( !is_null($this->image) )
        {
            $text_color = imagecolorallocate($this->image,0,0,0);

            $text_x = ($this->taille_x-(strlen($this->titre)*imagefontwidth(3)))/2;

            imagestring($this->image, 3, $text_x, 5, $this->titre, $text_color);

            unset($text_x);
            unset($text_color);
        }
    }

    /* Trace les axes x et y et les bords */
    function SetAxes()
    {
        if ( !is_null($this->image) )
        {
            $line_color = imagecolorallocate($this->image,0,0,0);

            imageline($this->image, 80, 40, 80, 250, $line_color);
            imageline($this->image, 80, 250, 550, 250, $line_color);

            imageline($this->image, 0, 0, 0, $this->taille_y-1, $line_color);
            imageline($this->image, 0, $this->taille_y-1, $this->taille_x-1, $this->taille_y-1, $line_color);
            imageline($this->image, $this->taille_x-1, $this->taille_y-1, $this->taille_x-1, 0, $line_color);
            imageline($this->image, $this->taille_x-1, 0, 0, 0, $line_color);

            unset($line_color);
        }
    }

    /* Trace les points horizontaux */
    function SetXY()
    {
        $line_color = imagecolorallocate($this->image,0,0,0);
        $text_color = imagecolorallocate($this->image,0,0,0);

        $coord_x    = 80; /* Coordonnée x de la position de l'axe Y */

        $nb         = count( $this->donnees ); /* Nombre de données à traiter */

        // Trace les intervalles sur l'axe X et affiche les dates des zones */
        for($i=0;$i<$nb;$i++)
        {
            imageline($this->image, $coord_x, 245, $coord_x, 255, $line_color);

            $text_size = strlen($this->donnees[$i]["date"])*imagefontwidth(2);

            $x = ((40-imagefontheight(2))/2)+$coord_x;
            $y = 250 + $text_size + 5;

            imagestringup($this->image, 2, $x, $y, $this->donnees[$i]["date"], $text_color);

            $coord_x += 40;
        }

        /* Trace les intervalles sur l'axe Y et affiche l'échelle */
        /* Seuls 5 points "référence" sont tracés sur l'axe Y */
        for($i=0;$i<=5;$i++)
        {
            $text_y = ((210/5)*$i)+40;

            $valeur = round(($this->max/5)*(5-$i),0); /* Pas de chiffre à virgule, que des entiers */

            imageline($this->image,75,$text_y,85,$text_y,$line_color);

            imagestring($this->image,2,50,($text_y-(imagefontheight(2)/2)),$valeur,$line_color);
        }

        unset($line_color);
        unset($text_color);
        unset($coord_x);
        unset($text_size);
        unset($x);
        unset($y);
        unset($valeur);
        unset($text_y);
        unset($nb);
    }

    /* Tracage des histogrammes */
    function SetHistogramme()
    {
        $coord_x    = 80;

        $nb = count( $this->donnees ); /* Nombre de données à traiter */

        $line_color = imagecolorallocate($this->image, 255, 0, 0);
        $text_color = imagecolorallocate($this->image, 0, 0, 0);

        for($i=0;$i<$nb;$i++)
        {
            /* Calcule de la coordonnée Y du haut de l'histogramme */
            /* valeur_max <-> coord_max => y = (coord_max*valeur_x)/valeur_max */
            $coord_y = (250*$this->donnees[$i]["resultat"])/$this->max;

            if ( $coord_y == 250 )
                $coord_y = 40;
            else
                $coord_y = (250-$coord_y)+40;

            imagerectangle($this->image, $coord_x, $coord_y, $coord_x+40, 250, $line_color);

            /* Affichage des valeurs au sommet des histogrammes */
            if ( $this->print_valeur )
            {
                $text_x = $coord_x+((40-(strlen($this->donnees[$i]["resultat"])*imagefontwidth(1)))/2);

                if ( $i != 0 && $i != count($this->donnees) )
                {
                    if ( $this->donnees[$i-1]["resultat"] > $this->donnees[$i]["resultat"] && $this->donnees[$i+1]["resultat"] > $this->donnees[$i]["resultat"] )
                        $text_y = $coord_y+4;
                    else
                        $text_y = $coord_y-10;
                }
                else
                {
                    $text_y = $coord_y-10;
                }

                imagestring($this->image, 1, $text_x, $text_y, $this->donnees[$i]["resultat"], $text_color);
            }

            $coord_x += 40;
        }

        unset($coord_x);
        unset($coord_y);
        unset($text_x);
        unset($text_y);
        unset($coord_zero);
        unset($line_color);
        unset($text_color);
        unset($nb);
    }

    /* Trace la courbe d'évolution des analyses */
    function TraceCourbe()
    {
        $coord_x    = 80;

        $nb = count( $this->donnees ); /* Nombre de données à traiter */

        $line_color = imagecolorallocate($this->image, 0, 0, 255);

        /* Parcours du tableau jusqu'à n-1 car on a besoin des valeur à l'indice i et i+1 */
        for($i=0;$i<$nb-1;$i++)
        {
            $coord_y1 = (250*$this->donnees[$i]["resultat"])/$this->max;
            $coord_y2 = (250*$this->donnees[$i+1]["resultat"])/$this->max;

            if ( $coord_y1 == 250 )
                $coord_y1 = 40;
            else
                $coord_y1 = (250-$coord_y1)+40;

            if ( $coord_y2 == 250 )
                $coord_y2 = 40;
            else
                $coord_y2 = (250-$coord_y2)+40;

            imageline($this->image,$coord_x+20,$coord_y1,$coord_x+60,$coord_y2,$line_color);

            $coord_x += 40;
        }

        unset($coord_x);
        unset($coord_y1);
        unset($coord_y2);
        unset($line_color);
        unset($nb);
    }

    /* Trace la droite représentant la norme */
    function TraceNorme()
    {
        $color      = imagecolorallocate($this->image, 0, 0, 0);
        $line_color = imagecolorallocate($this->image, 0, 255, 0);

        $coord_y = (250*$this->norme)/$this->max;
        $coord_y = (250-$coord_y)+40;

        $text_y = $coord_y-(imagefontheight(2)/2);

        imageline($this->image, 75, $coord_y, 85, $coord_y, $color);
        imagestring($this->image, 2, 50, $text_y, round($this->norme,0), $color);

        imageline($this->image, 80, $coord_y, 550, $coord_y, $line_color);

        unset($line_color);
        unset($color);
        unset($coord_y);
        unset($text_y);
    }

    /***********
    ** PUBLIC **
    ***********/

    /* Constructeur de la classe */
    function Graphique($titre, $format="png", $print_courbe=true, $print_valeur=true, $print_titre=true, $print_norme=true, $red=255, $green=255, $blue=255, $id_analyse, $id_produit, $id_producteur)
    {
        $this->format = $format;

        if ( $titre )
            $this->titre = $titre;

        $this->print_courbe = $print_courbe;
        $this->print_valeur = $print_valeur;
        $this->print_titre  = $print_titre;
        $this->print_norme  = $print_norme;

        $this->id_producteur = $id_producteur;
        $this->id_analyse    = $id_analyse;
        $this->id_produit    = $id_produit;

        $this->Init();

        $this->SetBackground($red, $green, $blue);
    }

    /* Génération du graphique */
    function Generer()
    {
        $this->GetDonnees();

        $this->GetMax();

        $this->SetAxes();

        $this->SetXY();

        $this->SetHistogramme();

        if ( $this->print_titre )
            $this->SetTitre();

        if ( $this->print_courbe )
            $this->TraceCourbe();

        if ( $this->print_norme )
            $this->TraceNorme();
    }

    /* Affiche l'image */
    function Afficher()
    {
        if ( $this->image )
        {
            switch( $this->format )
            {
                case "png":
                    header('Content-type: image/png');
                    imagepng($this->image);
                    break;
                case "jpg":
                    header('Content-type: image/jpg');
                    imagejpeg($this->image);
                    break;
                case "gif":
                    header("Content-type: image/gif");
                    imagegif($this->image);
                    break;
                default:
                    header('Content-type: image/png');
                    imagepng($this->image);
                    break;
            }
        }
    }

    /* Sauvegarde l'image du graphique dans un fichier */
    function Save( $filename )
    {
        if ( $this->image )
        {
            switch( $this->format )
            {
                case "png":
                    imagepng($this->image, $filename);
                    break;
                case "jpg":
                    imagejpeg($this->image, $filename, 100);
                    break;
                case "gif":
                    imagegif($this->image, $filename);
                    break;
                default:
                    imagepng($this->image, $filename);
                    break;
            }
        }
    }
}

?>

 Conclusion

<?
    include_once("include/graph.class.inc");

    $graph = new Graphique("Un graphique de test","png",true,true,true,true,255,255,255,2,24,2 29);

    $graph->Generer();

    $graph->Afficher();

    $graph->Save("graph.png");

    $graph->Flush();

    unset($graph);
?>


 Historique

15 juin 2005 10:23:55 :
Quelques améliorations suggérées par Anthomicro :)

 Sources de la même categorie

CLASSE DE GESTION DE "VARIABLES GLOBALES D'ENVIRONNEMENT" par pifou25
Source avec Zip COLLECTION.CLASS.MIN.PHP par thunderhunter
Source avec Zip SIMPLETEMPLATE par thunderhunter
Source avec Zip Source avec une capture VOIR QUI VISITE VOTRE SITE par Dariumis
Source avec Zip CLASS SIMPLE CBASEDONNEE par smag42

Commentaires et avis

Commentaire de LocalStone le 08/06/2005 19:39:20

Haaaaaaaaa ! J'ai deux avis qui se battent dans ma tête. Le premier, c'est qu'il existe déjà JPGraph pour faire de beaux graphiques en PHP. Alors ta classe est inutile (sauf pour les requêtes SQL). L'autre, c'est que ... Bah je trouve ça excellent de faire des graphs soit même et c'est ce que tu as fait. Donc 9/10.
je te conceille de cherche un algorithme pour faire une approximation polynominale dont la courbe passe par les points ou un truc dans ce genre pour relier tous les points autrement que par des droites. Je reconnais que ce n'est pas super utile au niveau des stats pures, mais ça rendra le graphique plus beau.
++ !
L.S.

Commentaire de jfperras le 08/06/2005 21:15:43

Impressionnant!

10/10

Commentaire de morpheus262 le 09/06/2005 09:23:11

Salut,

Moi je trouve ca trés bien, car n arrivant pas a faire marcher la jpgraph et ne trouvant aucun tutoriel digne de ce nom sur internet je suis bien content de trouver une source comme ca, et j espere reussir a la faire marcher sur mon site. donc grand merci.
Je met 9/10 sans avoir testé mais

Commentaire de Anthomicro le 09/06/2005 13:15:48

Salut,

ta source est vraiment pas mal. Je te mets 9/10.

Tu peux remplacer <? par <?php pour des questions de portabilité et tu peux remplacer les diverses boucles :

for($i=0;$i<count($this->donnees)-1;$i++)
{

par ça :

$nb=count($this->donnees)-1;
for($i=0;$i<$nb;$i++)
{
//
}

pour des raisons de performances.

a +

Commentaire de massacr le 09/06/2005 17:51:20

Ba dis donc, pour une première sources, tu commences fort. C'est vraiment impec. Je te met 9/10 pour que tu l'améliore encore. lol

Commentaire de babid le 09/06/2005 18:05:59

Salut,

Sympathique ta class (9/10) mais pour une question de portabilité, j'aurai passé les données sql en variables (sous forme de tableau) de sorte à réutiliser la class si n'utilise pas SQL. Sinon c'est du bon boulot bien codé.

Bonne continuation.

Commentaire de kishkaya le 09/06/2005 19:55:29

Bon jsuis en spe math, le truc d'approximation affines peut etre amelioré en approximation par des polynomes. Ne sachant pas comment faire des graphique (mais je vais me pencher dessus) je peux pas te pondre le code. Mais le nom des polynomes en question est tres connu :
t'as polynome de Weirstrass (que je conseille)
ou polynome de Lagrange (plus simple a comprendre)
Si tu veux des infos pour trouver le degré du polynome, s'assurer de sa concavité/convexité entre deux points etc... tu peux m'envoyer un message jte sors mes cours de sup (;
Voila Je sais pas si ca sert ce queje raconte mais le premier commentaire parler d'approximation poluynomiale et moi je me servirais de mes acuis de math pour faire ca =)
_Marikou

Commentaire de massacr le 09/06/2005 20:34:27

Euh. Je passe le brevet. C'est de mon niveau ? lol

Commentaire de Anthomicro le 09/06/2005 20:40:25

LOL

Commentaire de LocalStone le 09/06/2005 22:16:11

Hééé, c'est moi le premier commentaire ! Je connais le polynome de Lagrange, mais je ne connais pas le polynome de Weierstrass ... C'est quoi ? Et c'est quoi la différence par rapport à celui de Lagrange ... Kishkaya, vas-y, étale ta science !!!
++ !
L.S.

Commentaire de kishkaya le 17/06/2005 22:13:32

oula j'etale ma science...
Faut que je sorte le cours car weirstrass je l'ai eu qu'en exercice et maintenant que les ecrits sont passés ( et que jmen suis bien sorti =) ) ben weirstrass j'en ai un peu rien a cogner. Mais tu peux faire lagrange ca marche nikel chrome ca.
En plus le nom originel c'est : 'Polynome interpolateur de Lagrange' donc avec ca tu fais de l'interpolation de courbe

Desole pour le Weirstrass mais je dois chercher dans mes cours et ya pas mal de feuille
Sinon le niveau brevet c'est pas trop trop accessible moi j'ai vu ca en premiere année de prepa (l'année derniere) ca necessite quelque notions sur les espaces et sur la comprehension des objet qu'on manipule. Bref... Faut de la pratique.
Mais jvais essayer de te pondre un ptit tuto (de 20 lignes) sur comment faire passer une fonction polynomiale par X points (pour la concavité ou la convexité ca sera un ptit peu plus dur =) )
Marikou

Commentaire de espada le 26/06/2007 11:01:34

y aurait pas un zip, c'est plus simple!

Commentaire de AbdelM4l1k le 11/08/2011 22:13:45

ben C cool maintenant que JPGraph est mort..

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,572 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales