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