Graphe a baton

gabs77 Messages postés 379 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 8 octobre 2008 - 14 juin 2006 à 11:54
gabs77 Messages postés 379 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 8 octobre 2008 - 15 juin 2006 à 09:19
bonjour,
je debute dans le graphisme en image PHP
sa m a tout l air d un domaine interessant une fois qu'on sait le maitriser
seulement je ne parviens pas a faire d histogramme qui va du bas vers le haut cad qui a pour origine de base le bas de l image
voici mon script pour le moment

<?php
header ("Content-type: image/png");
$w=500;                   /* largeur de l'image */
$h=250;                   /* hauteur de l'image */
//enregistrer les valeurs
$values=array('janvier'=>120,'fevrier'=>200);   
//compter le nb de valeurs a afficher
$nb_bar =  count($values);


$captions=array_keys($values);//prendre les noms associés aux valeurs du tableau
$values=array_values($values);//prendre les valeurs du tableau
//determinons les valurs minimales et maximales d un array
$value_temp = $values;
asort($value_temp, SORT_NUMERIC);//trie de l array en mode croissant
$minvalue = $value_temp[0];
rsort($value_temp, SORT_NUMERIC);//trie de l array en mode décroissant
$maxvalue = $value_temp[0];


$img=imagecreate($w+10,$h); 
$BleuPale = imagecolorallocate($img, 10, 150, 255);
$bleu = imagecolorallocate($img, 10, 150, 255);
$orange = imagecolorallocate($img, 255, 128, 0);
$bleuclair = imagecolorallocate($img, 156, 227, 254);
$noir = imagecolorallocate($img, 0, 0, 0);
$blanc = imagecolorallocate($img, 255, 255, 255);
//intervalle
$interval = 9;
for($i = 0; $i < $h; $i++)
{imageline($img,0,$i,$w,$i,$noir);
$i=$i+$interval;
}
$prof = 5;// profondeur
//creation des batons
$distance = round($w / $nb_bar - 0.25,1);//largeur d'un baton arrondi par défaut$ecart ($maxvalue - $minvalue )/ $h; //echelle du graphe soit 1px $ecart
for($i = 0; $i < $nb_bar; $i++)
{
$X1 = 10;
$X2 = $X1+$distance;
$Y2 = 20;
$Y1 = floor(10 + ($values[$i] / $h)*100);
$point = array($X1,$Y1,$X2,$Y1,$X2,$Y2,$X1,$Y2);
if($i % 2 ==0){imagefilledpolygon($img,$point,4,$orange);}
  else{imagefilledpolygon($img,$point,4,$bleuclair);}
  imagepolygon($img,$point,4,$noir);

imagestring($img,2,$X1-40+$distance/2,0,$captions[$i].'('.$values[$i].')',$noir);
$X1 = $X2 + 10;
}


   imagepng($img, 'coucou.png');
   imagedestroy($img);
   echo '';
?>

4 réponses

J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
14 juin 2006 à 12:21
Salut,

Et si je te dis :"JpGraph" ?
Tu ne te sucides pas hein !

A+
0
gabs77 Messages postés 379 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 8 octobre 2008
14 juin 2006 à 12:40
mdr,
non non tkt je ne me suiciderai pour rien au monde
j avai dej entendu parler de JPgraph, seulement je sais que'on peut le faire par soit meme il est vrai que ce sera moins bien mais c une satisfaction personnelle apres
mais je ve tente de regarder cela de plus pres ke mm tout en cherchant d autre part a faire le graph moi mm
lol
merci ke mm ++
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
15 juin 2006 à 07:26
Hello,

j'ai pas envie de mater ton code de bon matin...lol, mais bon, ce n'est pas très compliqué : tu as les coordonnées des grafs que tu traces. Suffit de modifier les bons...quel est ton problème précisément ?
0
gabs77 Messages postés 379 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 8 octobre 2008
15 juin 2006 à 09:19
en fait, j'ai deux problèmes :
- premièrement, lorsque l'on dessine un polygone, on utilise ceci
//avec array de type $point = array(X1,Y1,X2,Y2,X3,Y3,X4,Y4);
$point = array($X1,$Y1,$X2,$Y1,$X2,$Y2,$X1,$Y2);
imagefilledpolygon($img,$point,4,$orange);

les valeurs X sont faciles a donné et 2 valeurs Y sur les 4 sont faciles a données(ils sont en bas de l'image et forme la base), les deux autres doit etre un calcul a faire pour dire à quelle hauteur faut se positionner pour un histogramme classique avec la base en bas (comme celui en dessous) et non pas un histogramme je vais dire inversé avec la base en haut

 et voila ce que g trouver cette nuit qui me semble donné le résultat satisfaisant

$distance = round($w / $nb_bar -0.25,1);//largeur de barre arrondi par défaut
$echelle = ($maxvalue - $minvalue )/ $h; //echelle des barres
for($i = 0; $i < $nb_bar; $i++)
{
$X1 = $distance * $i;
$X2 = $X1 + $distance;
$Y1 = $h;
$Y2 = floor($h - ($values[$i] - $minvalue * $echelle));
$point = array($X1,$Y1,$X2,$Y1,$X2,$Y2,$X1,$Y2);
imagefilledpolygon($img,$point,4,$orange);
}

 - deuxiemement, un probleme avec la couleur d arriere plan de l image
auquel g exposé le pb sur le lien suivant http://www.phpcs.com/infomsg_PB-TRANSPARENCE-IMAGE-PHP_758835.aspx
le fait est que je ne parviens pas a obtenir un arriere plan blanc
0
Rejoignez-nous