Here i am going to give you a code through which you can generate Graph image for your business site or for any kind of site depending on the input data.

You can use the input data from your SQL Database to make this graph dynamic and more useful which is really easy to do. :) To use the below code you just need to insert values in ‘$values’ array. The array key defines the one dimension and its value defines other dimension for the graph. The variable ‘$img_width’ and $img_height are used for defining the height and width of the graph generated by the PHP. Most of the php functions used in this code are from php gd library.

Here is the code you can use:-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?php
 
 # ------- The graph values in the form of associative array
 $values=array(
 "Jan" => 110,
 "Feb" => 130,
 "Mar" => 215,
 "Apr" => 81,
 "May" => 310,
 "Jun" => 110,
 "Jul" => 190,
 "Aug" => 175,
 "Sep" => 390,
 "Oct" => 286,
 "Nov" => 150,
 "Dec" => 196
 );
 
 $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);
 $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);
 $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);
 
?>

Thats it…

One Response so far.

  1. Wilhelmina says:

    You keep it up now, udnresatnd? Really good to know.