Histogramme empilé 100 %

Soyez le premier à donner votre avis sur cette source.

Snippet vu 12 556 fois - Téléchargée 35 fois

Contenu du snippet

Tout est dans le titre ...

Source / Exemple :


<?php
header("Content-type: image/png");
$couleur_barre = "51,255,255;255,255,102;204,0,51;51,102,204;51,255,0;50,3,255"; //les différentes couleurs des segments
$barre_coul = explode(";", $couleur_barre);

$valeurs = "20,27,5,26,30;40,80,10,20,30;100,200,30,400,30;220,123,456,55,30"; // entre ; les barres - entre , les valeurs de segments
$intitules = "segment 1;segment 2;segment 3;segment 4;segment 5"; //les intitulés des segments
$intitule = explode(";",$intitules);

$barres = explode(";",$valeurs);
$nb = count($barres);
for ($i=0;$i<$nb;$i++)
    $valeurs_segment[$i] = explode(",", $barres[$i]);
$nb_couleurs = count($valeurs_segment[0]);

for ($i=0;$i<$nb_couleurs;$i++)
    $couleurs[$i] = explode(",", $barre_coul[$i]);

for ($i=0;$i<$nb;$i++) // chaque barre
    {
    $valeur_barre[$i]=0;
    for ($j=0;$j<$nb_couleurs;$j++)
        $valeur_barre[$i] = $valeur_barre[$i]+$valeurs_segment[$i][$j];  
    }
$large = 30; //largeur d'une barre
$espace=10; //espace entre les barres
$largeur_img = (($large+$espace)*$nb)+200; // le +200 sert pour l'espace où s'écrit la légende
$hauteur_img = 390;
$police = 2; //police d'écriture des intitulés de segments
$police_pc = 1;   //police d'écriture des pourcentages 
$img = imageCreate($largeur_img, $hauteur_img);
$fond = imageColorAllocate($img, 240, 240, 240);
$noir = imageColorAllocate($img, 0, 0, 0);

imagefill($img,0,0,$fond);

$max = 350;  // hauteur des barres
$x2=35; // position du graphique par rapport au côté gauche de l'image
$x1=0;
$y_haut=20; // position du graphique par rapport au haut de l'image
$y2=$max+$y_haut;
imageline($img, 5, $y_haut, 5, $y2, $noir);
$large_pc=(($large+$espace)*$nb)+20;

imageline($img, 5, $y_haut, $large_pc, $y_haut, $noir);
imagestring($img,$police_pc,12,$y_haut,"100 %",$noir);

$y_pc=round($max*0.25)+$y_haut;
imageline($img, 5, $y_pc, $large_pc, $y_pc, $noir);
imagestring($img,$police_pc,12,$y_pc,"75 %",$noir);

$y_pc=round($max*0.50)+$y_haut;
imageline($img, 5, $y_pc, $large_pc, $y_pc, $noir);
imagestring($img,$police_pc,12,$y_pc,"50 %",$noir);

$y_pc=round($max*0.75)+$y_haut;
imageline($img, 5, $y_pc, $large_pc, $y_pc, $noir);
imagestring($img,$police_pc,12,$y_pc,"25 %",$noir);

$y_pc=$max+$y_haut;
imageline($img, 5, $y_pc, $large_pc, $y_pc, $noir);
imagestring($img,$police_pc,12,$y_pc,"0 %",$noir);

for ($i=0;$i<$nb;$i++) // chaque barre
    {
    $x1=$x2;
    $x2=$x1+$large;
    $y1=$y_haut; // position du graphique par rapport au haut de l'image
    for ($j=0;$j<$nb_couleurs;$j++) // chaque segment
        {
         // $valeurs_segment[$i][$j] = valeur de chaque segment de barre
         // $valeur_barre[$i] = valeur du total de chaque barre
         // $couleurs[$j][0],1,2 = valeur de chaque couleur de segment
         $coul = imageColorAllocate($img, $couleurs[$j][0], $couleurs[$j][1], $couleurs[$j][2]);
         $h = ($valeurs_segment[$i][$j]/$valeur_barre[$i])*100;
         $h = round(($max*$h)/100);  // hauteur de chaque segment
         $y2=$y1+$h;
         if ($y2>$max+$y_haut)
            $y2=$max+$y_haut;
         imagerectangle($img,$x1+$espace,$y1,$x2,$y2,$noir);
         //imageFilledRectangle($img,$x1+$espace,$y1,$x2,$y2,$coul);
         imageFilledRectangle($img,$x1+$espace+1,$y1+1,$x2-1,$y2-1,$coul);
         $y1=$y2;
        }
    }
$y=20;
$x=$x2+50;
$x_ecrit=$x2+70;
for ($i=0;$i<count($intitule);$i++) // chaque intitulé
    {
    $y=$y+imageFontHeight($police)+10;
    $coul = imageColorAllocate($img, $couleurs[$i][0], $couleurs[$i][1], $couleurs[$i][2]);
    imagerectangle($img,$x,$y,$x+imageFontHeight($police),$y+imageFontHeight($police),$noir);
    imageFilledRectangle($img,$x+1,$y+1,$x+imageFontHeight($police)-1,$y+imageFontHeight($police)-1,$coul);
    imagestring($img,$police,$x_ecrit,$y,$intitule[$i],$noir);
    }

imagePNG($img);
imageDestroy($img);  

?>

Conclusion :


En espérant que ce code puisse rendre service ...

A voir également

Ajouter un commentaire Commentaires
massinissa290881
Messages postés
2
Date d'inscription
lundi 29 septembre 2008
Statut
Membre
Dernière intervention
29 septembre 2008

29 sept. 2008 à 22:26
comment interpreter des donner d'un tableau en php à un un histogramme
jmeunier
Messages postés
86
Date d'inscription
mardi 10 septembre 2002
Statut
Membre
Dernière intervention
17 mai 2013

25 janv. 2005 à 18:29
c'est là pour être utilisé ...
cs_neely
Messages postés
2
Date d'inscription
dimanche 23 janvier 2005
Statut
Membre
Dernière intervention
25 janvier 2005

25 janv. 2005 à 13:54
est ce que je peux l'utiliser pour gérer l'évolution d'un étudiant dans un établissement
bzhatao56
Messages postés
4
Date d'inscription
jeudi 22 juillet 2004
Statut
Membre
Dernière intervention
17 novembre 2006

19 oct. 2004 à 14:42
Bonne base pour débuter sans avoir à utiliser des librairies trop lourdes
cs_yami
Messages postés
3
Date d'inscription
jeudi 19 septembre 2002
Statut
Membre
Dernière intervention
18 octobre 2004

18 oct. 2004 à 18:51
Super ...
J'ai mis 10

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.