IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Créer deux courbes dans le même graphique avec GD, PHP et base de données MySQL [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2017
    Messages : 18
    Par défaut Créer deux courbes dans le même graphique avec GD, PHP et base de données MySQL
    Bonjour,

    J'ai suivi ce tuto : http://andry.developpez.com/tutoriel...s/?page=page_1 et j'arrive bien à afficher le graphique.

    Je souhaiterai adapter ce graphique à mes besoins. Je voudrais avoir deux courbes dans le même graphique afin de comparer deux données.

    Je ne parviens pas à afficher cela, j'ai soit l'une des courbes soit l'autre. Mais pas les deux en même temps.

    Pouvez-vous m'aider ? Je vous joins mon code.

    Par rapport au tuto, j’exécute une requête sql supplémentaire afin de comparer les données, ce sont les données de la colonne qtilot qui m'intéressent par rapport à qtvendu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    <?php
        try
        {
            $bdd = new PDO('mysql:host=localhost;dbname=mybdd', 'root', 'mdp');
            $bdd->exec("SET CHARACTER SET utf8");
        }
     
        catch (Exception $e)
        {
            die('Erreur : ' .$e->getMessage());
        }
     
       $requete = "SELECT `mois`, `qtvendu` FROM graphique GROUP BY mois ORDER BY mois ASC";
     
       $query = $bdd->query($requete);
     
        //Preparation des données : 
     
        $moisFr=array('Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre');
        $resultat=array();
        $i=0;
     
        while($row=$query->fetch(PDO::FETCH_OBJ))
        {
            //Mettre la ligne dans le tableau
            $resultat[$row->mois]=$row->qtvendu;
     
            //Prendre la première quantité vendue comme minimum et maximum
            if($i==0)
                {
                    $min=$row->qtvendu;
                    $max=$row->qtvendu;
                }
            //Tester si la quantité vendue est inférieure au minimum et le prendre si il l'est
            if($row->qtvendu < $min)
                {
                    $min=$row->qtvendu;
                }
            //Tester si la quantité vendue est supérieure au maximum et le prendre si il l'est
            else
                {
                    if($row->qtvendu > $max)
                     {
                        $max=$row->qtvendu;
                    }
                }
            $i++;
        }
     
     
        //Préparation de l'image
            //Type mime de l'image
            header('Content-type: image/png');
            //Chemin vers le police à utiliser
            $font_file = './fonts/comic.ttf';
            //Adapter la largeur de l'image avec le nombre de données
            $largeur=$i*50+90;
            $hauteur=350;
            //Hauteur de l'abscisse par rapport au bas de l'image
            $absis=80;
            //Création de l'image
            $courbe=imagecreatetruecolor($largeur, $hauteur);
            //Allouer les couleurs à utiliser
            $bleu=imagecolorallocate($courbe, 0, 0, 255);
            $ligne=imagecolorallocate($courbe, 220, 220, 220);
            $fond=imagecolorallocate($courbe, 239, 239, 239);
            $noir=imagecolorallocate($courbe, 0, 0, 0);
            $rouge=imagecolorallocate($courbe, 255, 0, 0);
            //Colorier le fond
            imagefilledrectangle($courbe,0 , 0, $largeur, $hauteur, $fond);
            //Tracer l'axe des abscisses
            imageline($courbe, 50, $hauteur-$absis, $largeur-10,$hauteur-$absis, $noir);
            //Tracer l'axe des ordonnées
            imageline($courbe, 50,$hauteur-$absis,50,20, $noir);
            //Decaler 10px vers le haut l'axe si le minimum est différent de 0
            if($min!=0)
            {
                $absis+=10;
                $a=10;
            }
            //Nombres des grid verticals
            $nbOrdonne=10;
            //Calcul de l'echelle des abscisses
            $echelleX=($largeur-100)/$i;
            //Calcul de l'echelle des ordonnees
            $echelleY=($hauteur-$absis-20)/$nbOrdonne;
            $i=$min;
            //Calcul des ordonnees des grid
            $py=($max-$min)/$nbOrdonne;
            $pasY=$absis;
            while($pasY<($hauteur-19))
            {
                //Affiche la valeur de l'ordonnee
                imagestring($courbe, 2,10 , $hauteur-$pasY-6, round($i), $noir);
                //Trace la gride
                imageline($courbe, 50, $hauteur-$pasY, $largeur-20,$hauteur-$pasY, $ligne);
                //Decaller vers le haut pour la prochaine grid
                $pasY+=$echelleY;
                //Valeur de l'ordonnee suivante
                $i+=$py;
            }
     
        //Tracage du diagramme
        $j=-1;
         //Position de la première mois de vente
         $pasX=90;
         //Parcourir le tableau pour le traçage de la diagramme
         foreach ($resultat as $mois => $quantite) 
         {
           //calculer la hauteur du point par rapport à sa valeur
           $y=($hauteur) -(($quantite -$min) * ($echelleY/$py))-$absis;
           //dessiner le point
           imagefilledellipse($courbe, $pasX, $y, 6, 6, $rouge);
           //Afficher le mois en français avec une inclinaison de 315°
           imagefttext($courbe, 10, 315, $pasX, $hauteur-$absis+20, $noir, $font_file, $moisFr[$mois-1]);
           //Tacer une ligne verticale de l'axe des abscisses vers le point
           imageline($courbe, $pasX, $hauteur-$absis+$a, $pasX,$y, $noir);
           if($j!==-1)
            {
              //liée le point actuel avec la précédente
              imageline($courbe,($pasX-$echelleX),$yprev,$pasX,$y,$rouge);
            }
            //Afficher la valeur au dessus du point
           imagestring($courbe, 2, $pasX-15,$y-14 , $quantite, $bleu);
           $j=$quantite;
           //enregister la hauteur du point actuel pour la liaison avec la suivante
           $yprev=$y;
           //Decaller l'abscisse suivante par rapport à son echelle
           $pasX+=$echelleX;
        }
        //Envoyer le flux de l'image
        imagepng($courbe);
        //Desallouer le memoire utiliser par l'image
        imagedestroy($courbe);
     
    // Deuxieme courbe
        $requeteilot = "SELECT `mois`, `qtilot` FROM graphique GROUP BY mois ORDER BY mois ASC";
     
        $queryilot = $bdd->query($requeteilot);
     
        //Preparation des données : 
     
        $moisFr=array('Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre');
        $resultatilot=array();
        $iilot=0;
     
        while($rowilot=$queryilot->fetch(PDO::FETCH_OBJ))
        {
            //Mettre la ligne dans le tableau
            $resultatilot[$rowilot->mois]=$rowilot->qtilot;
     
            //Prendre la première quantité vendue comme minimum et maximum
            if($iilot==0)
                {
                    $minilot=$rowilot->qtilot;
                    $maxilot=$rowilot->qtilot;
                }
            //Tester si la quantité vendue est inférieure au minimum et le prendre si il l'est
            if($rowilot->qtilot < $minilot)
                {
                    $minilot=$rowilot->qtilot;
                }
            //Tester si la quantité vendue est supérieure au maximum et le prendre si il l'est
            else
                {
                    if($rowilot->qtilot > $maxilot)
                     {
                        $maxilot=$rowilot->qtilot;
                    }
                }
            $iilot++;
        }
     
     
        //Préparation de l'image
            //Type mime de l'image
            header('Content-type: image/png');
            //Chemin vers le police à utiliser
            $font_file = './fonts/comic.ttf';
            //Adapter la largeur de l'image avec le nombre de données
            $largeurilot=$iilot*50+90;
            $hauteurilot=350;
            //Hauteur de l'abscisse par rapport au bas de l'image
            $absisilot=80;
            //Création de l'image
            $courbeilot=imagecreatetruecolor($largeurilot, $hauteurilot);
            //Allouer les couleurs à utiliser
            $bleuilot=imagecolorallocate($courbeilot, 0, 0, 255);
            $ligneilot=imagecolorallocate($courbeilot, 220, 220, 220);
            $fondilot=imagecolorallocate($courbeilot, 239, 239, 239);
            $noirilot=imagecolorallocate($courbeilot, 0, 0, 0);
            $rougeilot=imagecolorallocate($courbeilot, 255, 0, 0);
            //Colorier le fond
            imagefilledrectangle($courbeilot,0 , 0, $largeurilot, $hauteurilot, $fondilot);
            //Tracer l'axe des abscisses
            imageline($courbeilot, 50, $hauteurilot-$absisilot, $largeurilot-10,$hauteurilot-$absisilot, $noirilot);
            //Tracer l'axe des ordonnées
            imageline($courbeilot, 50, $hauteurilot-$absisilot,50,20, $noirilot);
            //Decaler 10px vers le haut l'axe si le minimum est différent de 0
            if($minilot!=0)
            {
                $absisilot+=10;
                $ailot=10;
            }
            //Nombres des grid verticals
            $nbOrdonneilot=10;
            //Calcul de l'echelle des abscisses
            $echelleXilot=($largeurilot-100)/$iilot;
            //Calcul de l'echelle des ordonnees
            $echelleYilot=($hauteurilot-$absisilot-20)/$nbOrdonneilot;
            $iilot=$minilot;
            //Calcul des ordonnees des grid
            $pyilot=($maxilot-$minilot)/$nbOrdonneilot;
            $pasYilot=$absisilot;
            while($pasYilot<($hauteurilot-19))
            {
                //Affiche la valeur de l'ordonnee
                imagestring($courbeilot, 2,10 , $hauteurilot-$pasYilot-6, round($iilot), $noirilot);
                //Trace la gride
                imageline($courbeilot, 50, $hauteurilot-$pasYilot, $largeurilot-20,$hauteurilot-$pasYilot, $ligneilot);
                //Decaller vers le haut pour la prochaine grid
                $pasYilot+=$echelleYilot;
                //Valeur de l'ordonnee suivante
                $iilot+=$pyilot;
            }
     
        //Tracage du diagramme
        $jilot=-1;
         //Position de la première mois de vente
         $pasXilot=90;
         //Parcourir le tableau pour le traçage de la diagramme
         foreach ($resultatilot as $mois => $quantiteilot) 
         {
           //calculer la hauteur du point par rapport à sa valeur
           $yilot=($hauteurilot) -(($quantiteilot -$minilot) * ($echelleYilot/$pyilot))-$absisilot;
           //dessiner le point
           imagefilledellipse($courbeilot, $pasXilot, $yilot, 6, 6, $rougeilot);
           //Afficher le mois en français avec une inclinaison de 315°
           imagefttext($courbeilot, 10, 315, $pasXilot, $hauteurilot-$absisilot+20, $noirilot, $font_file, $moisFr[$mois-1]);
           //Tacer une ligne verticale de l'axe des abscisses vers le point
           imageline($courbeilot, $pasXilot, $hauteurilot-$absisilot+$ailot, $pasXilot,$yilot, $noirilot);
           if($jilot!==-1)
            {
              //liée le point actuel avec la précédente
              imageline($courbeilot,($pasXilot-$echelleXilot),$yprevilot,$pasXilot,$yilot,$noirilot);
            }
            //Afficher la valeur au dessus du point
           imagestring($courbeilot, 2, $pasXilot-15,$yilot-14 , $quantiteilot, $bleuilot);
           $jilot=$quantiteilot;
           //enregister la hauteur du point actuel pour la liaison avec la suivante
           $yprevilot=$yilot;
           //Decaller l'abscisse suivante par rapport à son echelle
           $pasXilot+=$echelleXilot;
        }
        //Envoyer le flux de l'image
        imagepng($courbeilot);
        //Desallouer le memoire utiliser par l'image
        imagedestroy($courbeilot);
     
    ?>
    Je pense que je crée deux images au lieu de l'incorporer dans la précédente. Mais je ne vois pas comment faire.

    Merci d'avance

  2. #2
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Il faut que tu fasses le second graphique dans la même image.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2017
    Messages : 18
    Par défaut
    Merci de votre réponse.

    C'est bien ce qu'il me semblait, mais comment faire ? Je ne sais pas quelles variables créer à nouveau et quels sont les lignes qui ne me seront pas utiles pour tracer la deuxième courbe.

  4. #4
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Ben moi non plus.

    Mais si une fonctionne toute seule et l'autre aussi, je mettrais en commentaire les premiers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //Envoyer le flux de l'image
    imagepng($courbe);
    //Desallouer le memoire utiliser par l'image
    imagedestroy($courbe);
    et le second

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Content-type: image/png');
    Juste pour voir.

    Ooopss : en regardant plus avant le code c'est plus compliqué que ça.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2017
    Messages : 18
    Par défaut
    C'est également ce que j'ai tenté de faire mais cela n'a pas fonctionné.

    Il faut tout de même analyser le résultat de la requête et je suis un peu perdu dans toutes les variables étant donné que le code n'est pas de moi.
    Comment afficher le résultat des deux requêtes en même temps ?

    Si quelqu'un pouvait m'apporter son aide sur la construction de ce graphique, je lui en serai reconnaissant.

  6. #6
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Essaie ça, mais c'est sans conviction.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    <?php
    function deuxieme_image(&$courbe,$iilot,$resultatilot) {
     
        //Préparation de l'image
            //Chemin vers le police à utiliser
            $font_file = './fonts/comic.ttf';
            //Adapter la largeur de l'image avec le nombre de données
            $largeurilot=$iilot*50+90;
            $hauteurilot=350;
            //Hauteur de l'abscisse par rapport au bas de l'image
            $absisilot=80;
            //Allouer les couleurs à utiliser
            $bleuilot=imagecolorallocate($courbeilot, 0, 0, 255);
            $ligneilot=imagecolorallocate($courbeilot, 220, 220, 220);
            $fondilot=imagecolorallocate($courbeilot, 239, 239, 239);
            $noirilot=imagecolorallocate($courbeilot, 0, 0, 0);
            $rougeilot=imagecolorallocate($courbeilot, 255, 0, 0);        //Tracer l'axe des abscisses
            imageline($courbeilot, 50, $hauteurilot-$absisilot, $largeurilot-10,$hauteurilot-$absisilot, $noirilot);
            //Tracer l'axe des ordonnées
            imageline($courbeilot, 50, $hauteurilot-$absisilot,50,20, $noirilot);
            //Decaler 10px vers le haut l'axe si le minimum est différent de 0
            if($minilot!=0)
            {
                $absisilot+=10;
                $ailot=10;
            }
            //Nombres des grid verticals
            $nbOrdonneilot=10;
            //Calcul de l'echelle des abscisses
            $echelleXilot=($largeurilot-100)/$iilot;
            //Calcul de l'echelle des ordonnees
            $echelleYilot=($hauteurilot-$absisilot-20)/$nbOrdonneilot;
            $iilot=$minilot;
            //Calcul des ordonnees des grid
            $pyilot=($maxilot-$minilot)/$nbOrdonneilot;
            $pasYilot=$absisilot;
            while($pasYilot<($hauteurilot-19))
            {
                //Affiche la valeur de l'ordonnee
                imagestring($courbeilot, 2,10 , $hauteurilot-$pasYilot-6, round($iilot), $noirilot);
                //Trace la gride
                imageline($courbeilot, 50, $hauteurilot-$pasYilot, $largeurilot-20,$hauteurilot-$pasYilot, $ligneilot);
                //Decaller vers le haut pour la prochaine grid
                $pasYilot+=$echelleYilot;
                //Valeur de l'ordonnee suivante
                $iilot+=$pyilot;
            }
     
        //Tracage du diagramme
        $jilot=-1;
         //Position de la première mois de vente
         $pasXilot=90;
         //Parcourir le tableau pour le traçage de la diagramme
         foreach ($resultatilot as $mois => $quantiteilot) 
         {
           //calculer la hauteur du point par rapport à sa valeur
           $yilot=($hauteurilot) -(($quantiteilot -$minilot) * ($echelleYilot/$pyilot))-$absisilot;
           //dessiner le point
           imagefilledellipse($courbeilot, $pasXilot, $yilot, 6, 6, $rougeilot);
           //Afficher le mois en français avec une inclinaison de 315°
           imagefttext($courbeilot, 10, 315, $pasXilot, $hauteurilot-$absisilot+20, $noirilot, $font_file, $moisFr[$mois-1]);
           //Tacer une ligne verticale de l'axe des abscisses vers le point
           imageline($courbeilot, $pasXilot, $hauteurilot-$absisilot+$ailot, $pasXilot,$yilot, $noirilot);
           if($jilot!==-1)
            {
              //liée le point actuel avec la précédente
              imageline($courbeilot,($pasXilot-$echelleXilot),$yprevilot,$pasXilot,$yilot,$noirilot);
            }
            //Afficher la valeur au dessus du point
           imagestring($courbeilot, 2, $pasXilot-15,$yilot-14 , $quantiteilot, $bleuilot);
           $jilot=$quantiteilot;
           //enregister la hauteur du point actuel pour la liaison avec la suivante
           $yprevilot=$yilot;
           //Decaller l'abscisse suivante par rapport à son echelle
           $pasXilot+=$echelleXilot;
        }
     
     
    }
    //==========================================================================================
        try
        {
            $bdd = new PDO('mysql:host=localhost;dbname=mybdd', 'root', 'mdp');
            $bdd->exec("SET CHARACTER SET utf8");
        }
     
        catch (Exception $e)
        {
            die('Erreur : ' .$e->getMessage());
        }
     
       $requete = "SELECT `mois`, `qtvendu` FROM graphique GROUP BY mois ORDER BY mois ASC";
     
       $query = $bdd->query($requete);
     
        //Preparation des données : 
     
        $moisFr=array('Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre');
        $resultat=array();
        $i=0;
     
        while($row=$query->fetch(PDO::FETCH_OBJ))
        {
            //Mettre la ligne dans le tableau
            $resultat[$row->mois]=$row->qtvendu;
     
            //Prendre la première quantité vendue comme minimum et maximum
            if($i==0)
                {
                    $min=$row->qtvendu;
                    $max=$row->qtvendu;
                }
            //Tester si la quantité vendue est inférieure au minimum et le prendre si il l'est
            if($row->qtvendu < $min)
                {
                    $min=$row->qtvendu;
                }
            //Tester si la quantité vendue est supérieure au maximum et le prendre si il l'est
            else
                {
                    if($row->qtvendu > $max)
                     {
                        $max=$row->qtvendu;
                    }
                }
            $i++;
        }
     
     
        //Préparation de l'image
            //Type mime de l'image
            header('Content-type: image/png');
            //Chemin vers le police à utiliser
            $font_file = './fonts/comic.ttf';
            //Adapter la largeur de l'image avec le nombre de données
            $largeur=$i*50+90;
            $hauteur=350;
            //Hauteur de l'abscisse par rapport au bas de l'image
            $absis=80;
            //Création de l'image
            $courbe=imagecreatetruecolor($largeur, $hauteur);
            //Allouer les couleurs à utiliser
            $bleu=imagecolorallocate($courbe, 0, 0, 255);
            $ligne=imagecolorallocate($courbe, 220, 220, 220);
            $fond=imagecolorallocate($courbe, 239, 239, 239);
            $noir=imagecolorallocate($courbe, 0, 0, 0);
            $rouge=imagecolorallocate($courbe, 255, 0, 0);
            //Colorier le fond
            imagefilledrectangle($courbe,0 , 0, $largeur, $hauteur, $fond);
            //Tracer l'axe des abscisses
            imageline($courbe, 50, $hauteur-$absis, $largeur-10,$hauteur-$absis, $noir);
            //Tracer l'axe des ordonnées
            imageline($courbe, 50,$hauteur-$absis,50,20, $noir);
            //Decaler 10px vers le haut l'axe si le minimum est différent de 0
            if($min!=0)
            {
                $absis+=10;
                $a=10;
            }
            //Nombres des grid verticals
            $nbOrdonne=10;
            //Calcul de l'echelle des abscisses
            $echelleX=($largeur-100)/$i;
            //Calcul de l'echelle des ordonnees
            $echelleY=($hauteur-$absis-20)/$nbOrdonne;
            $i=$min;
            //Calcul des ordonnees des grid
            $py=($max-$min)/$nbOrdonne;
            $pasY=$absis;
            while($pasY<($hauteur-19))
            {
                //Affiche la valeur de l'ordonnee
                imagestring($courbe, 2,10 , $hauteur-$pasY-6, round($i), $noir);
                //Trace la gride
                imageline($courbe, 50, $hauteur-$pasY, $largeur-20,$hauteur-$pasY, $ligne);
                //Decaller vers le haut pour la prochaine grid
                $pasY+=$echelleY;
                //Valeur de l'ordonnee suivante
                $i+=$py;
            }
     
        //Tracage du diagramme
        $j=-1;
         //Position de la première mois de vente
         $pasX=90;
         //Parcourir le tableau pour le traçage de la diagramme
         foreach ($resultat as $mois => $quantite) 
         {
           //calculer la hauteur du point par rapport à sa valeur
           $y=($hauteur) -(($quantite -$min) * ($echelleY/$py))-$absis;
           //dessiner le point
           imagefilledellipse($courbe, $pasX, $y, 6, 6, $rouge);
           //Afficher le mois en français avec une inclinaison de 315°
           imagefttext($courbe, 10, 315, $pasX, $hauteur-$absis+20, $noir, $font_file, $moisFr[$mois-1]);
           //Tacer une ligne verticale de l'axe des abscisses vers le point
           imageline($courbe, $pasX, $hauteur-$absis+$a, $pasX,$y, $noir);
           if($j!==-1)
            {
              //liée le point actuel avec la précédente
              imageline($courbe,($pasX-$echelleX),$yprev,$pasX,$y,$rouge);
            }
            //Afficher la valeur au dessus du point
           imagestring($courbe, 2, $pasX-15,$y-14 , $quantite, $bleu);
           $j=$quantite;
           //enregister la hauteur du point actuel pour la liaison avec la suivante
           $yprev=$y;
           //Decaller l'abscisse suivante par rapport à son echelle
           $pasX+=$echelleX;
        }
     
    // Deuxieme courbe
        $requeteilot = "SELECT `mois`, `qtilot` FROM graphique GROUP BY mois ORDER BY mois ASC";
     
        $queryilot = $bdd->query($requeteilot);
     
        //Preparation des données : 
     
        $moisFr=array('Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre');
        $resultatilot=array();
        $iilot=0;
     
        while($rowilot=$queryilot->fetch(PDO::FETCH_OBJ))
        {
            //Mettre la ligne dans le tableau
            $resultatilot[$rowilot->mois]=$rowilot->qtilot;
     
            //Prendre la première quantité vendue comme minimum et maximum
            if($iilot==0)
                {
                    $minilot=$rowilot->qtilot;
                    $maxilot=$rowilot->qtilot;
                }
            //Tester si la quantité vendue est inférieure au minimum et le prendre si il l'est
            if($rowilot->qtilot < $minilot)
                {
                    $minilot=$rowilot->qtilot;
                }
            //Tester si la quantité vendue est supérieure au maximum et le prendre si il l'est
            else
                {
                    if($rowilot->qtilot > $maxilot)
                     {
                        $maxilot=$rowilot->qtilot;
                    }
                }
            $iilot++;
        }
     
     deuxieme_image($courbe,$iilot,$resultatilot);
        //Envoyer le flux de l'image
        imagepng($courbe);
        //Desallouer le memoire utiliser par l'image
        imagedestroy($courbe); 
     
    ?>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. deux courbes dans le même graphique
    Par info_sara dans le forum Excel
    Réponses: 5
    Dernier message: 02/06/2015, 15h27
  2. Deux boxplots dans un même graphique
    Par Floflo57240 dans le forum QlikView
    Réponses: 1
    Dernier message: 13/06/2014, 10h06
  3. deux courbes dans une même figure
    Par marina123 dans le forum MATLAB
    Réponses: 16
    Dernier message: 11/07/2012, 17h14
  4. Réponses: 2
    Dernier message: 23/03/2009, 14h06
  5. [Portlet] portlet avec un accès à une base de donné mysql
    Par prodit96 dans le forum Portails
    Réponses: 1
    Dernier message: 12/01/2009, 15h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo