Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1186 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Libraire GD : inverser l'ordre dans un histogramme

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Libraire GD : inverser l'ordre dans un histogramme

n°1894599
oli1987
Posté le 12-06-2009 à 16:58:38  profilanswer
 

Bonjour,
 
J'utilise GD pour créer un histogramme de statistiques.
 
Voyez l'exemple ici : http://www.bcml.be/GD/stats_year.php
 
Ce n'est pas trop mal, sauf que je voudrais que le mois de Mai, situé comme premier mois sur l'axe horizontal, apparaisse en dernier ... Et inversément. Que le dernier soit le premier ... Je ne sais pas trop bien quel paramètre modifier et, surtout, comment ! D'avance merci !
 
Voici mon code php :
 

Code :
  1. <?php
  2. $result = mysql_query("SELECT mois, visit FROM bcmlbe ORDER BY id DESC LIMIT 12" );
  3. while ($row = mysql_fetch_array($result, MYSQL_NUM))
  4.   {
  5.   $k++;
  6.   $m++;
  7.     $visite_par_mois[$k]=$row[1];
  8.     $moistxt[$m] = $row[0];
  9.   }
  10. // on calcule le nombre de pages vues sur l'année   
  11. $max_visite = max($visite_par_mois); 
  12. // on spécifie le type d'image que l'on va créer, ici ce sera une image au format PNG   
  13. header ("Content-type: image/png" ); 
  14. // on définit la largeur et la hauteur de notre image   
  15. $largeur = 490; 
  16. $hauteur = 230; 
  17. // on crée une ressource pour notre image qui aura comme largeur $largeur et $hauteur comme hauteur (on place également un or die si la création se passait mal afin d'avoir un petit message d'alerte)   
  18. $im = @ImageCreate ($largeur, $hauteur) or die ("Erreur lors de la création de l'image" ); 
  19. // on place tout d'abord la couleur blanche dans notre table des couleurs (je vous rappelle donc que le blanc sera notre couleur de fond pour cette image).   
  20. $blanc = ImageColorAllocate ($im, 255, 255, 255); 
  21. // on place aussi le noir dans notre palette, ainsi qu'un bleu foncé et un bleu clair   
  22. $noir = ImageColorAllocate ($im, 0, 0, 0); 
  23. $bleu_fonce = ImageColorAllocate ($im, 76, 0, 153); 
  24. $bleu_clair = ImageColorAllocate ($im, 150, 100, 200); 
  25. // on dessine un trait horizontal pour représenter l'axe du temps   
  26. ImageLine ($im, 20, $hauteur-30, $largeur-15, $hauteur-30, $noir); 
  27. // on affiche le numéro des 12 mois   
  28. for ($i=1; $i<=12; $i++) {
  29.     $monthnbr = substr($moistxt[$i], -2);
  30.     $monthtxt = substr($moistxt[$i], 0, 3);
  31.     $month = $monthtxt.' '.$monthnbr;
  32.    if ($i==1) {
  33.       ImageString($im, 2, 32, $hauteur-28, $monthtxt, $bleu_fonce);
  34.    }
  35.    else {
  36.       ImageString($im, 2, ($i)*32, $hauteur-28, $monthtxt, $bleu_fonce);
  37.    } 
  38. // on dessine un trait vertical pour représenter le nombre de pages vues   
  39. ImageLine ($im, 20, 30, 20, $hauteur-30, $noir); 
  40. // on affiche les legendes sur les deux axes ainsi que différents textes (note : pour que le script trouve la police verdana, vous devrez placer la police verdana dans un repertoire /fonts/)   
  41. imagettftext($im, 10, 0, $largeur-70, $hauteur-10, $noir, "./fonts/ARIAL.TTF", "Mois" ); 
  42. imagettftext($im, 10, 0, 10, 20, $noir, "./fonts/ARIAL.TTF", "Nombre de visites" ); 
  43. imagettftext($im, 10, 0, $largeur-250, 20, $noir, "./fonts/ARIAL.TTF", "Statistiques des derniers mois..." );
  44. imagettftext($im, 8, 0, 10, 50, $noir, "./fonts/ARIAL.TTF", "6000" ); 
  45. imagettftext($im, 8, 0, 10, 105, $noir, "./fonts/ARIAL.TTF", "4000" ); 
  46. imagettftext($im, 8, 0, 10, 160, $noir, "./fonts/ARIAL.TTF", "2000" ); 
  47. // on parcourt les douze mois de l'année   
  48. for ($mois=1; $mois <= 12; $mois++) {
  49.    if ($visite_par_mois[$mois]!="0" ) {
  50.       // on calcule la hauteur du baton  
  51.       $hauteurImageRectangle = ceil(((($visite_par_mois[$mois])*($hauteur-50))/$max_visite));
  52.       if ($mois=="1" ) {
  53.          // si le mois est janvier, on affiche notre premier baton  
  54.          // on affiche le premier baton noir  
  55.          ImageFilledRectangle ($im, 32, $hauteur-$hauteurImageRectangle, 32+14, $hauteur-31, $noir);
  56.          // on affiche le second baton, bleu foncé, qui sera un peu plus petit que le noir afin de recouvrir une partie du noir  
  57.          ImageFilledRectangle ($im, 34, $hauteur-$hauteurImageRectangle+2, 32+12, $hauteur-31-1, $bleu_fonce); 
  58.          // on affiche le dernier baton, bleu clair, qui sera un peu plus petit que le bleu foncé afin de recouvrir une partie du bleu foncé (on obtiendra ainsi un effet de dégradé)  
  59.          ImageFilledRectangle ($im, 38, $hauteur-$hauteurImageRectangle+2, 32+8, $hauteur-31-1, $bleu_clair);
  60.       }
  61.       else
  62.          // si le mois est different de janvier, on affiche les autres batons  
  63.          ImageFilledRectangle ($im, ($mois)*32, $hauteur-$hauteurImageRectangle, ($mois)*32+14, $hauteur-31, $noir);
  64.          ImageFilledRectangle ($im, ($mois)*32+2, $hauteur-$hauteurImageRectangle+2, ($mois)*32+12, $hauteur-31-1, $bleu_fonce);
  65.          ImageFilledRectangle ($im, ($mois)*32+6, $hauteur-$hauteurImageRectangle+2, ($mois)*32+8, $hauteur-31-1, $bleu_clair);
  66.       }
  67.    } 
  68. // on dessine le tout   
  69. Imagepng ($im); 
  70. ?>

mood
Publicité
Posté le 12-06-2009 à 16:58:38  profilanswer
 

n°1895023
tomsoft
Posté le 15-06-2009 à 02:53:09  profilanswer
 

Je connais pas l'archi de ta bdd, donc ca ca doit en theorie passer :
 

Code :
  1. <?php
  2. $result = mysql_query("SELECT mois, visit FROM bcmlbe ORDER BY id DESC LIMIT 12" );
  3. while ($row = mysql_fetch_array($result, MYSQL_NUM))
  4.  {
  5.  $k++;
  6.  $m++;
  7.    $visite_par_mois[$k]=$row[1];
  8.    $moistxt[$m] = $row[0];
  9.  }
  10.  
  11.  
  12. /* modifs ici */
  13. $visite_par_mois=array_reverse($visite_par_mois);
  14. $moistxt= array_reverse($moistxt);
  15. /* fin des modifs */
  16.  
  17.  
  18. // on calcule le nombre de pages vues sur l'année  
  19. $max_visite = max($visite_par_mois);  
  20.  
  21.  
  22. // on spécifie le type d'image que l'on va créer, ici ce sera une image au format PNG  
  23. header ("Content-type: image/png" );  
  24.  
  25. // on définit la largeur et la hauteur de notre image  
  26. $largeur = 490;  
  27. $hauteur = 230;  
  28.  
  29. // on crée une ressource pour notre image qui aura comme largeur $largeur et $hauteur comme hauteur (on place également un or die si la création se passait mal afin d'avoir un petit message d'alerte)  
  30. $im = @ImageCreate ($largeur, $hauteur) or die ("Erreur lors de la création de l'image" );  
  31.  
  32. // on place tout d'abord la couleur blanche dans notre table des couleurs (je vous rappelle donc que le blanc sera notre couleur de fond pour cette image).  
  33. $blanc = ImageColorAllocate ($im, 255, 255, 255);  
  34.  
  35. // on place aussi le noir dans notre palette, ainsi qu'un bleu foncé et un bleu clair  
  36. $noir = ImageColorAllocate ($im, 0, 0, 0);  
  37. $bleu_fonce = ImageColorAllocate ($im, 76, 0, 153);  
  38. $bleu_clair = ImageColorAllocate ($im, 150, 100, 200);  
  39.  
  40.  
  41. // on dessine un trait horizontal pour représenter l'axe du temps  
  42. ImageLine ($im, 20, $hauteur-30, $largeur-15, $hauteur-30, $noir);  
  43.  
  44. // on affiche le numéro des 12 mois  
  45. for ($i=1; $i<=12; $i++) {
  46.  
  47.    $monthnbr = substr($moistxt[$i], -2);
  48.    $monthtxt = substr($moistxt[$i], 0, 3);
  49.    $month = $monthtxt.' '.$monthnbr;
  50.  
  51.   if ($i==1) {
  52.      ImageString($im, 2, 32, $hauteur-28, $monthtxt, $bleu_fonce);
  53.   }
  54.   else {
  55.      ImageString($im, 2, ($i)*32, $hauteur-28, $monthtxt, $bleu_fonce);
  56.   }  
  57. }  
  58.  
  59. // on dessine un trait vertical pour représenter le nombre de pages vues  
  60. ImageLine ($im, 20, 30, 20, $hauteur-30, $noir);  
  61.  
  62. // on affiche les legendes sur les deux axes ainsi que différents textes (note : pour que le script trouve la police verdana, vous devrez placer la police verdana dans un repertoire /fonts/)  
  63. imagettftext($im, 10, 0, $largeur-70, $hauteur-10, $noir, "./fonts/ARIAL.TTF", "Mois" );  
  64. imagettftext($im, 10, 0, 10, 20, $noir, "./fonts/ARIAL.TTF", "Nombre de visites" );  
  65. imagettftext($im, 10, 0, $largeur-250, 20, $noir, "./fonts/ARIAL.TTF", "Statistiques des derniers mois..." );
  66. imagettftext($im, 8, 0, 10, 50, $noir, "./fonts/ARIAL.TTF", "6000" );  
  67. imagettftext($im, 8, 0, 10, 105, $noir, "./fonts/ARIAL.TTF", "4000" );  
  68. imagettftext($im, 8, 0, 10, 160, $noir, "./fonts/ARIAL.TTF", "2000" );  
  69.  
  70. // on parcourt les douze mois de l'année  
  71. for ($mois=1; $mois <= 12; $mois++) {
  72.   if ($visite_par_mois[$mois]!="0" ) {
  73.      // on calcule la hauteur du baton
  74.      $hauteurImageRectangle = ceil(((($visite_par_mois[$mois])*($hauteur-50))/$max_visite));
  75.      if ($mois=="1" ) {
  76.         // si le mois est janvier, on affiche notre premier baton
  77.         // on affiche le premier baton noir
  78.         ImageFilledRectangle ($im, 32, $hauteur-$hauteurImageRectangle, 32+14, $hauteur-31, $noir);
  79.         // on affiche le second baton, bleu foncé, qui sera un peu plus petit que le noir afin de recouvrir une partie du noir
  80.         ImageFilledRectangle ($im, 34, $hauteur-$hauteurImageRectangle+2, 32+12, $hauteur-31-1, $bleu_fonce);  
  81.         // on affiche le dernier baton, bleu clair, qui sera un peu plus petit que le bleu foncé afin de recouvrir une partie du bleu foncé (on obtiendra ainsi un effet de dégradé)
  82.         ImageFilledRectangle ($im, 38, $hauteur-$hauteurImageRectangle+2, 32+8, $hauteur-31-1, $bleu_clair);
  83.      }
  84.      else {  
  85.         // si le mois est different de janvier, on affiche les autres batons
  86.         ImageFilledRectangle ($im, ($mois)*32, $hauteur-$hauteurImageRectangle, ($mois)*32+14, $hauteur-31, $noir);
  87.         ImageFilledRectangle ($im, ($mois)*32+2, $hauteur-$hauteurImageRectangle+2, ($mois)*32+12, $hauteur-31-1, $bleu_fonce);
  88.         ImageFilledRectangle ($im, ($mois)*32+6, $hauteur-$hauteurImageRectangle+2, ($mois)*32+8, $hauteur-31-1, $bleu_clair);
  89.      }
  90.   }  
  91. }  
  92. // on dessine le tout  
  93. Imagepng ($im);  
  94. ?>



Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Libraire GD : inverser l'ordre dans un histogramme

 

Sujets relatifs
fonction imagejpeg() lors de miniaturisation (librairie GD)[Resolu]GD
Inverser une listeProblème de tracé d'un histogramme
Récuperer le contenu d'un noeud simplexmlelement dans l'ordre ?Comment classer par ordre Alpha sur une page
Afficher le symbole € (euro) avec librairie GD PHP[SQL] Trier par ordre croissant après une valeur
[RESOLU]Content-types et upload d'image - Librairie GD 
Plus de sujets relatifs à : Libraire GD : inverser l'ordre dans un histogramme


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR