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(10, round(log10($maxValeur))-1);
  
  
$img = ImageCreate($largeur, $hauteur + $hauteurLegende);
  
$couleurFond = ImageColorAllocate($img, 250, 240, 230);  // linen
  
$couleurGrille = ImageColorAllocate($img, 100, 100, 100); // grey
  
$couleurBarre = ImageColorAllocate($img, 205, 85, 85);   // IndianRed
  
$couleurTexte = ImageColorAllocate($img, 47, 79, 79); // DarkSlateGray    

  // dessin du fond
  
ImageFill($img, 0, 0, $couleurFond);
  for (
$valeur = 0; $valeur < $maxValeur; $valeur += $pasGraduation) {
    
$i = ($hauteur - round($hauteur * $valeur / $maxValeur));
    
ImageSetStyle($img, array($couleurGrille, $couleurGrille,
                  
$couleurGrille, $couleurFond,
                  
$couleurFond, $couleurFond));
    
ImageLine($img, 0, $i, $largeur, $i, IMG_COLOR_STYLED);
    
ImageString($img, $fonte, 5, $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 += 2 * $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);
?>