Thursday, April 11, 2013

How to Create a Graph using PHP


Here I am describing a simple method to create a dynamic bar graph using php. Here I am utilizing the php image functions based on GD image library.
We can us this code for representing your dates’ in graphical format. I am used a array ($values) for holding my data. We can take data in to this array either from the database or just give directly.
# ------This is my data to be displayed as graph
$values  =array();
$values[2010]=120;
$values[2011]=70;
$values[2012]=150;
$values[2013]=200;
$values[2014]=45;
$values[2015]=110;

$img_width=650;
$img_height=400;
$margins=20;
# ---- Find the size of graph by subtracting 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; //width of each bar
$total_bars=count($values); //total number of bars
$gap= ($graph_width- $total_bars * $bar_width ) / ($total_bars +1);  //gap between two bars
# -------  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);
$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);
                                $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);
?>   

I am showing 20 values in the y axis .we can change it with changing following codes
$ratio= $graph_height/$max_value;
$horizontal_lines=20;
$horizontal_gap=$graph_height/$horizontal_lines;

Here I wrote the entire code in graph.php file .if we ants to display it in any html file Just use the following code in the space where we actually wants to display the graph.


0 comments :

Post a Comment

 
Powered by Blogger