Membuat Dynamic Bar Graph di PHP

Terkadang, kita ingin melihat data statistik dari database dalam bentuk grafik. Ada banyak reference di internet yang membahas tentang ini. Tetapi, kadang-kadang hanya statik grafik yang tidak menggunakan data dari dalam database. Tentu saja kita juga ingin sesuatu yang dinamik. Untuk itu, silahkan ikuti cara-cara di berikut ini.
1. Database
Silahkan buat database baru dengan nama "graph" atau nama lain yang anda suka.
2. Buat Table dan Isinya
Silahkan buat table baru dengan nama "store" atau nama lain yang anda suka. Dan setelah itu, pastikan table "store" memiliki struktur sebagai berikut:
Table "store":
CREATE TABLE store (
    id INT(11) NOT NULL AUTO_INCREMENT,
    name VARCHAR(500) NOT NULL,
    number INT(11) NOT NULL,
    PRIMARY KEY (id)
);

Setelah membuat table "store", silahkan masukkan data ke dalam table "store":
Insert data into table "store":
INSERT INTO store (name,number) VALUES ("Jan",10);
INSERT INTO store (name,number) VALUES ("Feb",30);
INSERT INTO store (name,number) VALUES ("Mar",20);

3. PHP Files
Anda perlu membuat 3 PHP Files:

Begini cara kerjanya. File "c.php" adalah file untuk kita membuat koneksi ke SQL database. File "graph.php" adalah file dimana kita akan generate grafik bar. Dan file "index.php" adalah tambahan saja. File "index.php" akan memanggil konten dari dalam file "graph.php".
Ok. Mari mulai tutorialnya...
c.php:
<?php
$c=mysql_connect("localhost","dbuser","dbpwd");
mysql_select_db("graph", $c);
?>

graph.php:
<?php

include "c.php";

$chart_query = mysql_query("SELECT id, name, number FROM store");
 
$values_graph=array();
 
while($row = mysql_fetch_array($chart_query))
{
  $key=$row['name'];
  $values_graph[$key] = (number_format($row['number'],1));
}
 
    $img_width=450;
    $img_height=300; 
    $margins=20;

 
    # ---- Find the size of graph by substracting the size of borders
    $graph_width=$img_width - $margins * 2;
    $graph_height=$img_height - $margins * 2; 
    $img=imagecreate($img_width,$img_height);

 
    $bar_width=20;
    $total_bars=count($values_graph);
    $gap= ($graph_width- $total_bars * $bar_width ) / ($total_bars +1);

 
    # -------  Define Colors ----------------
    $bar_color=imagecolorallocate($img,0,64,128);
    $background_color=imagecolorallocate($img,240,240,255);
    $border_color=imagecolorallocate($img,200,200,200);
    $line_color=imagecolorallocate($img,220,220,220);
 
    # ------ Create the border around the graph ------

    imagefilledrectangle($img,1,1,$img_width-2,$img_height-2,$border_color);
    imagefilledrectangle($img,$margins,$margins,$img_width-1-$margins,$img_height-1-$margins,$background_color);

 
    # ------- Max value is required to adjust the scale    -------
    $max_value=max($values_graph);
    $ratio= $graph_height/$max_value;

 
    # -------- Create scale and draw horizontal lines  --------
    $horizontal_lines=20;
    $horizontal_gap=$graph_height/$horizontal_lines;

    for($i=1;$i<=$horizontal_lines;$i++){
        $y=$img_height - $margins - $horizontal_gap * $i ;
        imageline($img,$margins,$y,$img_width-$margins,$y,$line_color);
        $v=intval($horizontal_gap * $i /$ratio);
        imagestring($img,0,5,$y-5,$v,$bar_color);

    }
 
 
    # ----------- Draw the bars here ------
    for($i=0;$i< $total_bars; $i++){ 
        # ------ Extract key and value pair from the current pointer position
        list($key,$value)=each($values_graph); 
        $x1= $margins + $gap + $i * ($gap+$bar_width) ;
        $x2= $x1 + $bar_width; 
        $y1=$margins +$graph_height- intval($value * $ratio) ;
        $y2=$img_height-$margins;
        imagestring($img,0,$x1+3,$y1-10,$value,$bar_color);
        imagestring($img,0,$x1+3,$img_height-15,$key,$bar_color);        
        imagefilledrectangle($img,$x1,$y1,$x2,$y2,$bar_color);
    }
    
    header("Content-type:image/png");
    imagepng($img);

?>

Isi file index.php sebetulnya hanya HTML syntax.
index.php:
<img src="graph.php?maybe=some?data=etc">
<br/>
OR This Way
<br/>
<img src="graph.php">

Sudah siap? Silahkan akses file "graph.php" atau "index.php" untuk melihat apa yang telah anda buat.
Semoga berhasil...
You graph may look (more or less) like this:

Thanks to this reference: http://www.qualitycodes.com/tutorial.php?articleid=20&title=How-to-create-bar-graph-in-PHP-with-dynamic-scaling

Labels: , , , , , , , , ,