Sloupcový graf pomocí GD knihovny -
zdrojový kód
<?
/**************************************************************************/
/* Program: Sloupcový graf */
/* Verze: 1.1 */
/* Autor: Jan Schmied */
/* E-mail: honzas@digitals.cz */
/* ICQ: 297-841-982 */
/* Licence: Freeware, Opensource */
/* */
/* Program je určen k vytváření slopcových grafů do obrázku */
/* ve formatu jpeg/png/gif. Kvalita grafu je ovlivněna GD */
/* knihovnou, takže na některých místech (hlavně kolem textů) */
/* je graf rozmazaný. */
/* */
/**************************************************************************/
//parametry grafu
$nazev="Pokusný graf"; //název grafu
$format="jpeg"; // jpeg/png/gif
$prvky=array(
array(20,"Leden"),
array(24,"Únor"),
array(48,"Březen"),
array(58,"Duben"),
array(62,"Květen"),
array(66,"Červen"),
array(74,"Červenec"),
array(80,"Srpen"),
array(85,"Záři"),
array(88,"Říjen"),
array(92,"Listopad"),
array(99,"Prosinec"),
); //hodnoty grafu, 1. hodnota (int) 2. název sloupce (string)
//vodcaď dolů už se v tom nehrabte :)
//funkce pro diakritiku
function ISOget($vstup_str)
{
return StrTr($vstup_str, chr(138).chr(141).chr(142).chr(154).chr(157).chr(158),
chr(169).chr(171).chr(174).chr(185).chr(187).chr(190));
}
function set_slope($im,$hodnota,$jmeno,$poradi,$max){
$x1=70*$poradi+40*($poradi-1);
$x2=$x1+80;
$hod=$hodnota;
$bod=3.2; //rozsahy (beta)
if ($max>100){
$bod=0.32;
$hod=$hod/pow(10,strlen($max)-1);
}
$y=370-number_format($bod*$hodnota);
$points=array($x1,370,$x2,370,$x2,$y,$x1,$y);
$colours=array(imagecolorallocate($im,255,0,0), //červená
imagecolorallocate($im,0,255,0), //zelená
imagecolorallocate($im,0,0,255), //modrá
imagecolorallocate($im,255,255,0), //žlutá
imagecolorallocate($im,0,255,255), //cyan?
imagecolorallocate($im,255,0,255), //magnetta?
imagecolorallocate($im,0,0,0), //černá
imagecolorallocate($im,255,255,255),//bílá
);
$countcol=count($colours); //pocty barev a opakování
while($poradi > $countcol)
$poradi = $poradi - $countcol;
$text= imagecolorallocate($im,0,0,0); //barva textů
imagefilledpolygon($im,$points,4,$colours[$poradi-1]); //sloupce
imagestring($im,5,$x1+20,$y-20,$hodnota,$text); //hodnota nad grafem
imagestring($im,5,$x1+10,375,ISOget($jmeno),$text); //jmeno pod grafem
}
header ("Content-type: image/".$format);
$width=400;
$height=110*(count($prvky))+110;
$lines=370;
$im=imagecreate($height,$width);
$background = imagecolorallocate($im, 150,150,150); //pozadi
$line= imagecolorallocate($im,78,78,78); //barva linek
$text= imagecolorallocate($im,0,0,0);
imagestring($im,5,10,($lines-320)-8,"100",$text); //linky a cisla u nich
imageline($im, 40, $lines-320, $height-40, $lines-320, $line );
imagestring($im,5,10,($lines-240)-8,"75".$f,$text);
imageline($im, 40, $lines-240, $height-40, $lines-240, $line );
imagestring($im,5,10,($lines-160)-8,"50".$f,$text);
imageline($im, 40, $lines-160, $height-40, $lines-160, $line );
imagestring($im,5,10,($lines-80)-8,"25".$f,$text);
imageline($im, 40, $lines-80, $height-40, $lines-80, $line );
imagestring($im,5,10,362,"0",$text);
imageline($im, 40, $lines, $height-40, $lines, $line );
imagestring($im,5,10,10,ISOget($nazev),$text);
$max=$prvky[0][0]; // maximalni cislo pro urceni rozsahu
for ($i=1;$i<count($prvky);$i++){
if ($max<$prvky[$i][0])
$max=$prvky[$i][0];
}
for ($i=0;$i<count($prvky);$i++) // vykresleni sloupcu
set_slope($im,$prvky[$i][0],$prvky[$i][1],$i+1,$max);
if ($format=="jpeg") //format obraku
imagejpeg($im);
elseif ($format=="png")
imagepng($im);
elseif ($format=="gif")
imagegif($im);
imagedestroy($im);
?>