Source de ce script :
<!DOCTYPE html>
<title>Un dessin en PHP</title>
<?php
echo "Source de ce script :\n";
echo 
"<figure>\n";
highlight_file(__FILE__);
echo 
"</figure>\n";

echo 
"L'image ci-dessous est fabriquée par un script PHP.";
echo 
"<figure><img src=\"faireHisto.php\" alt=\"histogramme\" /></figure>";

echo 
"Voici le source PHP pour fabriquer l'image : ";
echo 
"<figure>\n";
highlight_file("faireHisto.php");
echo 
"</figure>\n";
?>
L'image ci-dessous est fabriquée par un script PHP.
histogramme
Voici le source PHP pour fabriquer l'image :
<?php
// Fabrique un histogramme
// void histogramme(string texteLegende, array data, [int pasGraduation] )
function histogramme($texteLegende$data$pasGraduation 0) {
  
$maxValeur max($data); //            ^  ---------------------------- 
  
$maxValeur *= 1.1;       //              |                            |
  
if ($maxValeur == 0)     //              |                            |
    
$maxValeur 1;        //      hauteur |                            |
  
$largeur 600;          //              |                            |
  
$hauteur 300;          //            v |                            |
  
$fonte 2;              //            ^ |                            |
  
$hauteurLegende 30;    //    hauteurLeg|                            |
  
$fonteLegende 3;       //            v  ---------------------------- 
                           //              <            largeur         >

  // par défaut, le pas est une puissance de 10
  
if ($pasGraduation == 0
    
$pasGraduation pow(10round(log10($maxValeur))-1);
  
  
$img ImageCreate($largeur$hauteur $hauteurLegende);
  
$couleurFond ImageColorAllocate($img250240230);  // linen
  
$couleurGrille ImageColorAllocate($img100100100); // grey
  
$couleurBarre ImageColorAllocate($img2058585);   // IndianRed
  
$couleurTexte ImageColorAllocate($img477979); // DarkSlateGray    

  // dessin du fond
  
ImageFill($img00$couleurFond);
  for (
$valeur 0$valeur $maxValeur$valeur += $pasGraduation) {
    
$i = ($hauteur round($hauteur $valeur $maxValeur));
    
ImageSetStyle($img, array($couleurGrille$couleurGrille,
                  
$couleurGrille$couleurFond,
                  
$couleurFond$couleurFond));
    
ImageLine($img0$i$largeur$iIMG_COLOR_STYLED);
    
ImageString($img$fonte5$i-imageFontHeight($fonte), $valeur$couleurTexte); 
  }

  
// dessin des barres
  
$nbdata sizeof($data);
  
$largeurBarre $largeur / ($nbdata+1) / 2;
  
$barreGauche $largeurBarre/2;
  
reset($data);
  while (list(
$nom$valeur) = each($data)) {
    
$barreGauche += $largeurBarre;
    
$barreHaut = ($hauteur round($hauteur $valeur $maxValeur));
    
    
ImageFilledRectangle($img$barreGauche$barreHaut$barreGauche+$largeurBarre$hauteur$couleurBarre);
    
//inscrire le nom verticalement dans le rectangle
    
$labelX $barreGauche $largeurBarre/2;
    
$labelY $hauteur 10;
    
ImageStringUp($img$fonte$labelX$labelY$nom$couleurTexte);
  }
  
  if (
$hauteurLegende 0)
    
ImageString($img$fonteLegende$largeurBarre$hauteur+$hauteurLegende/2$texteLegende$couleurTexte);       
  
  
// on crée du png, donc on indique son type mime
  //header("Content-type: image/png");
  
ImagePng($img);
}  

$systemes = array ("Windows en 1998"     => 38,
           
"Netware en 1998"     => 19,
           
"Linux en 1998"       => 16,
           
"Autres Unix en 1998" => 23,
           
"Autres en 1998"      => 4,
           
"Windows en 1999"     => 38,
           
"Netware en 1999"     => 15,
           
"Linux en 1990"       => 25,
           
"Autres Unix en 1999" => 19,
           
"Autres en 1999"      => 3,
           
"Windows en 2000"     => 41,
           
"Netware en 2000"     => 14,
           
"Linux en 2000"       => 27,
           
"Autres Unix en 2000" => 17,
           
"Autres en 2000"      => 1
           
);
histogramme("Repartition  des ventes mondiales de serveurs en %"$systemes);
?>