Dienstag, 20. Juli 2010

Imagick - Säulendiagramm

Mit php Diagramme erstellen? Das geht schnell und einfach!
Mit einem kleinen Skript kann man Säulendiagramme wie dieses hier erstellen:



Dazu braucht man nur php und imagick

<?php
//Funktion Balken
function balken($draw,$x,$y,$h,$b) { // balken($draw,x,y,hoehe,breite);
if ($h<$b/2) {$h=$b/2;} // Wenn die Hoehe kleiner als darstellbar ist, wird sie genullt
$draw->rectangle($GLOBALS['startx']+$x,$GLOBALS['height']-$GLOBALS['starty']-$h+$b/4-$y,
$GLOBALS['startx']+$b+$x,$GLOBALS['height']-$GLOBALS['starty']-1-$b/4-$y); // _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Rechteck
$draw->ellipse($GLOBALS['startx']+$x+$b/2,$GLOBALS['height']-$GLOBALS['starty']-$b/4-$y-1,$b/2,$b/4,0,180); // _ Untere Ellipse
$draw->ellipse($GLOBALS['startx']+$x+$b/2,$GLOBALS['height']-$GLOBALS['starty']-$h+$b/4-$y,$b/2,$b/4,0,360); //_ Obere Ellipse
}

$werte=array(30,50,40,20,0,60); // Beliebige Werte fuer Balkenhoehen

//Bestimmung der maximalen Saeulenhoehe
$maxheight=0;
foreach ($werte as $val) {
if ($val > $maxheight) {
$maxheight=$val;
}
}

// Balkeneigenschaften
$randfarbe='lightgrey'; //_ _ _ _ _ _ _ Randfarbe
$fuellfarbe='gold'; //_ _ _ _ _ _ _ _ _ Fuellfarbe
$randbreite=1; // _ _ _ _ _ _ _ _ _ _ _ Randbreite
$xversch=50; // _ _ _ _ _ _ _ _ _ _ _ _ Horizontale Verschiebung des naechsten Balkens
$yversch=0; //_ _ _ _ _ _ _ _ _ _ _ _ _ Vertikale Verschiebung des naechsten Balkens
$breite=40; //_ _ _ _ _ _ _ _ _ _ _ _ _ Balkenbreite
$startx=40; //_ _ _ _ _ _ _ _ _ _ _ _ _ Der Abstand vom linken Rand zur ersten Saeule
$starty=40; //_ _ _ _ _ _ _ _ _ _ _ _ _ Der Abstand vom unteren Rand zur ersten Saeule

$height=300; // _ _ _ _ _ _ _ _ _ _ _ _ Höhe der Grafik
$width=300+$startx; //_ _ _ _ _ _ _ _ _ Breite der Grafik + linken Abstand zur ersten Saeule
$diff=($height-$starty)/$maxheight; //_ Der Multilikator fuer jede Balkenhoehe, damit kein Balken groesser wird als die Hoehe der Grafik

// Erstellen des Image-Objektes mit bestimmten Eigenschaften
$image = new Imagick();
$image->newImage($width,$height, new ImagickPixel('none')); // none wird transparent
$image->setImageFormat('png');
$draw = new ImagickDraw();

$draw->setStrokeColor($randfarbe);
$draw->setFillColor($fuellfarbe);
$draw->setStrokeWidth($randbreite);
$count=0;
foreach($werte as $val) {
// Fuer jeden Wert wird die Funktion Balken aufgerufen, die den Balken zeichnet
balken($draw,$count*$xversch,$count++*$yversch,$val*$diff,$breite);
}

$image->drawImage($draw); //Zeichnen der Saeulen in die Grafik

// $image->writeImage('image.png'); // _ _ _ _ _ _ Speichern der Grafik und/oder
header('Content-type: image/png'); echo $image; // Ausgabe der Grafik

$image->clear(); $image->destroy();
?>

Keine Kommentare:

Kommentar veröffentlichen