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