<?php
# ------- The graph values in the form of associative 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;
$bar_width=20;
$total_bars=count($values); $gap= ($graph_width- $total_bars * $bar_width ) / ($total_bars +1);
# ------- Define Colors ----------------
# ------ Create the border around the graph ------
imagefilledrectangle($img,$margins,$margins,$img_width-1-$margins,$img_height-1-$margins,$background_color);
# ------- Max value is required to adjust the scale -------
$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);
}
# ----------- Draw the bars here ------
for($i=0;$i< $total_bars; $i++){
# ------ Extract key and value pair from the current pointer position
$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,$img_height-15,$key,$bar_color); }
header("Content-type:image/png");
?>
PD9waHAKCSMgLS0tLS0tLSBUaGUgZ3JhcGggdmFsdWVzIGluIHRoZSBmb3JtIG9mIGFzc29jaWF0aXZlIGFycmF5CgkkdmFsdWVzPWFycmF5KAoJCSJKYW4iID0+IDExMCwKCQkiRmViIiA9PiAxMzAsCgkJIk1hciIgPT4gMjE1LAoJCSJBcHIiID0+IDgxLAoJCSJNYXkiID0+IDMxMCwKCQkiSnVuIiA9PiAxMTAsCgkJIkp1bCIgPT4gMTkwLAoJCSJBdWciID0+IDE3NSwKCQkiU2VwIiA9PiAzOTAsCgkJIk9jdCIgPT4gMjg2LAoJCSJOb3YiID0+IDE1MCwKCQkiRGVjIiA9PiAxOTYKCSk7CgogCgkkaW1nX3dpZHRoPTQ1MDsKCSRpbWdfaGVpZ2h0PTMwMDsgCgkkbWFyZ2lucz0yMDsKCiAKCSMgLS0tLSBGaW5kIHRoZSBzaXplIG9mIGdyYXBoIGJ5IHN1YnN0cmFjdGluZyB0aGUgc2l6ZSBvZiBib3JkZXJzCgkkZ3JhcGhfd2lkdGg9JGltZ193aWR0aCAtICRtYXJnaW5zICogMjsKCSRncmFwaF9oZWlnaHQ9JGltZ19oZWlnaHQgLSAkbWFyZ2lucyAqIDI7IAoJJGltZz1pbWFnZWNyZWF0ZSgkaW1nX3dpZHRoLCRpbWdfaGVpZ2h0KTsKCiAKCSRiYXJfd2lkdGg9MjA7CgkkdG90YWxfYmFycz1jb3VudCgkdmFsdWVzKTsKCSRnYXA9ICgkZ3JhcGhfd2lkdGgtICR0b3RhbF9iYXJzICogJGJhcl93aWR0aCApIC8gKCR0b3RhbF9iYXJzICsxKTsKCiAKCSMgLS0tLS0tLSAgRGVmaW5lIENvbG9ycyAtLS0tLS0tLS0tLS0tLS0tCgkkYmFyX2NvbG9yPWltYWdlY29sb3JhbGxvY2F0ZSgkaW1nLDAsNjQsMTI4KTsKCSRiYWNrZ3JvdW5kX2NvbG9yPWltYWdlY29sb3JhbGxvY2F0ZSgkaW1nLDI0MCwyNDAsMjU1KTsKCSRib3JkZXJfY29sb3I9aW1hZ2Vjb2xvcmFsbG9jYXRlKCRpbWcsMjAwLDIwMCwyMDApOwoJJGxpbmVfY29sb3I9aW1hZ2Vjb2xvcmFsbG9jYXRlKCRpbWcsMjIwLDIyMCwyMjApOwogCgkjIC0tLS0tLSBDcmVhdGUgdGhlIGJvcmRlciBhcm91bmQgdGhlIGdyYXBoIC0tLS0tLQoKCWltYWdlZmlsbGVkcmVjdGFuZ2xlKCRpbWcsMSwxLCRpbWdfd2lkdGgtMiwkaW1nX2hlaWdodC0yLCRib3JkZXJfY29sb3IpOwoJaW1hZ2VmaWxsZWRyZWN0YW5nbGUoJGltZywkbWFyZ2lucywkbWFyZ2lucywkaW1nX3dpZHRoLTEtJG1hcmdpbnMsJGltZ19oZWlnaHQtMS0kbWFyZ2lucywkYmFja2dyb3VuZF9jb2xvcik7CgogCgkjIC0tLS0tLS0gTWF4IHZhbHVlIGlzIHJlcXVpcmVkIHRvIGFkanVzdCB0aGUgc2NhbGUJLS0tLS0tLQoJJG1heF92YWx1ZT1tYXgoJHZhbHVlcyk7CgkkcmF0aW89ICRncmFwaF9oZWlnaHQvJG1heF92YWx1ZTsKCiAKCSMgLS0tLS0tLS0gQ3JlYXRlIHNjYWxlIGFuZCBkcmF3IGhvcml6b250YWwgbGluZXMgIC0tLS0tLS0tCgkkaG9yaXpvbnRhbF9saW5lcz0yMDsKCSRob3Jpem9udGFsX2dhcD0kZ3JhcGhfaGVpZ2h0LyRob3Jpem9udGFsX2xpbmVzOwoKCWZvcigkaT0xOyRpPD0kaG9yaXpvbnRhbF9saW5lczskaSsrKXsKCQkkeT0kaW1nX2hlaWdodCAtICRtYXJnaW5zIC0gJGhvcml6b250YWxfZ2FwICogJGkgOwoJCWltYWdlbGluZSgkaW1nLCRtYXJnaW5zLCR5LCRpbWdfd2lkdGgtJG1hcmdpbnMsJHksJGxpbmVfY29sb3IpOwoJCSR2PWludHZhbCgkaG9yaXpvbnRhbF9nYXAgKiAkaSAvJHJhdGlvKTsKCQlpbWFnZXN0cmluZygkaW1nLDAsNSwkeS01LCR2LCRiYXJfY29sb3IpOwoKCX0KIAogCgkjIC0tLS0tLS0tLS0tIERyYXcgdGhlIGJhcnMgaGVyZSAtLS0tLS0KCWZvcigkaT0wOyRpPCAkdG90YWxfYmFyczsgJGkrKyl7IAoJCSMgLS0tLS0tIEV4dHJhY3Qga2V5IGFuZCB2YWx1ZSBwYWlyIGZyb20gdGhlIGN1cnJlbnQgcG9pbnRlciBwb3NpdGlvbgoJCWxpc3QoJGtleSwkdmFsdWUpPWVhY2goJHZhbHVlcyk7IAoJCSR4MT0gJG1hcmdpbnMgKyAkZ2FwICsgJGkgKiAoJGdhcCskYmFyX3dpZHRoKSA7CgkJJHgyPSAkeDEgKyAkYmFyX3dpZHRoOyAKCQkkeTE9JG1hcmdpbnMgKyRncmFwaF9oZWlnaHQtIGludHZhbCgkdmFsdWUgKiAkcmF0aW8pIDsKCQkkeTI9JGltZ19oZWlnaHQtJG1hcmdpbnM7CgkJaW1hZ2VzdHJpbmcoJGltZywwLCR4MSszLCR5MS0xMCwkdmFsdWUsJGJhcl9jb2xvcik7CgkJaW1hZ2VzdHJpbmcoJGltZywwLCR4MSszLCRpbWdfaGVpZ2h0LTE1LCRrZXksJGJhcl9jb2xvcik7CQkKCQlpbWFnZWZpbGxlZHJlY3RhbmdsZSgkaW1nLCR4MSwkeTEsJHgyLCR5MiwkYmFyX2NvbG9yKTsKCX0KCWhlYWRlcigiQ29udGVudC10eXBlOmltYWdlL3BuZyIpOwoJaW1hZ2VwbmcoJGltZyk7Cgo/Pg==