KOMPOOS.NL

grafiek - PHP

home » php » grafiek.html

sitemap


lijn-grafiek-php html | lijn-grafiek-svg html | lijn-grafiek-javascript html


voorbeeld grafiek

lijn grafiek php

uitleg php lijn grafiek

Voor het vergeten wordt, is hier eerst de helvetica.ttf die je nodig hebt om de tekst in de php-grafiek weer te geven.
Maak een nieuwe file aan met (als voorbeeld) de naam lijngrafiek.php. Plaats daar het onderstaande php script in, en roep het geheel aan door middel van een img.


<img src="lijngrafiek.php" width="500" height="200" alt="lijn grafiek php" />

De variabelen in het script spreken allemaal voor zichzelf, dus het zou eenvoudig moeten zijn om alle parameters en variabelen "in te stellen". Let er even op dat bij sommige server-configuraties het font voorzien moet worden van een "path". In plaats van "helvetica.ttf" moet er dan "./helvetica.ttf" geschreven worden.

php code voor de lijn grafiek


<?php
$breedte = 500;
$hoogte = 200;
$rand_links = 40;
$rand_boven = 20;
$rand_rechts = 20;
$rand_onder = 40;
$gegevens = array(
'01' => 108,
'02' => 117,
'03' => 119,
'04' => 111,
'05' => 121,
'06' => 129,
'07' => 121,
'08' => 132,
'09' => 121,
'10' => 117,
'11' => 109,
'12' => 113,
'13' => 123,
'14' => 105,
'15' => 118,
'16' => 112,
'17' => 117,
'18' => 114,
'19' => 108,
'20' => 112,
'21' => 114,
'22' => 121,
'23' => 109,
'24' => 100,
'25' => 108,
'26' => 120,
'27' => 109,
'28' => 118,
'29' => 121,
'30' => 128,
'31' => 131
);
$grafiek = imagecreatetruecolor($breedte, $hoogte);
$tekst = imagecolorallocate($grafiek,120,120,120);
$tekst_achtergrond = imagecolorallocate($grafiek,255,240,240);
$grafiek_border = imagecolorallocate($grafiek, 140, 250, 50);
$grafiek_lijn = imagecolorallocate($grafiek,45,174,255);
$raster = imagecolorallocate($grafiek, 240,240,240);
$achtergrond_van_grafiek = imagecolorallocate($grafiek,252,255,252);
imagefill($grafiek, 0,0, $achtergrond_van_grafiek);
function dubbele_lijn($image, $x1, $y1, $x2, $y2, $kleur, $dikte = 2)
{
    if ($dikte == 1) {return imageline($image, $x1, $y1, $x2, $y2, $kleur);}
    $t = $dikte / 2 - 0.5;
    if ($x1 == $x2 || $y1 == $y2) {
    return imagefilledrectangle($image, round(min($x1, $x2) - $t), round(min($y1, $y2) - $t), round(max($x1, $x2) + $t), round(max($y1, $y2) + $t), $kleur);}
    $k = ($y2 - $y1) / ($x2 - $x1);
    $a = $t / sqrt(1 + pow($k, 2));
    $punten = array(
    round($x1 - (1+$k)*$a), round($y1 + (1-$k)*$a),
    round($x1 - (1-$k)*$a), round($y1 - (1+$k)*$a),
    round($x2 + (1+$k)*$a), round($y2 - (1-$k)*$a),
    round($x2 + (1-$k)*$a), round($y2 + (1+$k)*$a),);
    imagefilledpolygon($image, $punten, 4, $kleur);
return imagepolygon($image, $punten, 4, $kleur);}
$omlijsting =  array(
0,0,
0,$hoogte,
$breedte, $hoogte,
$breedte, 0,
$rand_links,0,
$rand_links, $rand_boven,
$breedte-$rand_rechts, $rand_boven,
$breedte-$rand_rechts, $hoogte-$rand_onder,
$rand_links, $hoogte-$rand_onder,
$rand_links, 0);
imagefilledpolygon($grafiek, $omlijsting, count($omlijsting)/2, $tekst_achtergrond);
$grafiek_breedte = $breedte-$rand_links-$rand_rechts;
$grafiek_hoogte = $hoogte-$rand_onder-$rand_boven;
$y_max = max($gegevens);
$y_min = min($gegevens);
$y_stapje = ceil( ($y_max - $y_min)/10);
$y_max = $y_min + 10 * $y_stapje;
for ($waarde = $y_min; $waarde <= $y_max; $waarde += $y_stapje){
    $y = $rand_boven + $grafiek_hoogte * ( 1 - ($waarde-$y_min) / ($y_max - $y_min) );
    imageline($grafiek, $rand_links, $y, $breedte-$rand_rechts, $y, $raster);
    $tekst_grootte = imagettfbbox(8, 0, "helvetica.ttf", $waarde);
    $tekst_breedte = $tekst_grootte[4]+$tekst_grootte[0];
    $tekst_hoogte =  0-$tekst_grootte[5];
imagettftext($grafiek, 8, 0, $rand_links-$tekst_breedte-8, $y + $tekst_hoogte/2, $tekst, "helvetica.ttf", round($waarde,1));}
$lijst_nummer = 0;
$previous_x = -1;
$previous_y = -1;
foreach ($gegevens AS $lijst => $waarde){
    $x = $rand_links + $grafiek_breedte * $lijst_nummer/(count($gegevens) - 1);
    $y = $rand_boven + $grafiek_hoogte * ( 1 - ($waarde-$y_min) / ($y_max - $y_min) );
    $tekst_grootte = imagettfbbox(8, 90, "helvetica.ttf", $lijst);
    $tekst_breedte = $tekst_grootte[4]+$tekst_grootte[0];
    $tekst_hoogte =  $tekst_grootte[1]-$tekst_grootte[3];
    imagettftext($grafiek, 8, 90, $x-$tekst_breedte/2, $hoogte - $rand_onder + $tekst_hoogte +3, $tekst, "helvetica.ttf", $lijst);
    imageline($grafiek, $x, $rand_boven, $x, $hoogte-$rand_onder, $raster);
    if ($previous_x != -1 && $previous_y != -1){
    dubbele_lijn($grafiek, $x, $y, $previous_x, $previous_y, $grafiek_lijn);}
    $previous_x = $x;
    $previous_y = $y;
$lijst_nummer++;}
imagerectangle($grafiek, $rand_links, $rand_boven, $breedte-$rand_rechts, $hoogte-$rand_onder, $grafiek_border);
header("Content-type: image/png");
imagepng($grafiek);
imagedestroy($grafiek);
?>
Gebruik voor alle voorbeelden op de http://kompoos.nl een valide html5 pagina.