Code: Select all
<?
//Set up DB
$hostname='';
//mysql user name
$username='';
//mysql user password
$password='';
//connect to the mysql server
$ss = mysql_pconnect($hostname, $username, $password) or die(mysql_error());
//select a database on the mysql server
mysql_select_db('');
//Get jan power consumption
for($day=1; $day<=31; $day++) {
$query = mysql_query(
"SELECT SUM(kw*tdsecs) FROM data
WHERE year(time) = year(CURDATE()) AND month(time) = month(CURDATE()) AND day(time) = $day");
$result = mysql_fetch_array($query);
$kwm[$day] = $result[0] / 60;
$kwh[$day] = round($kwm[$day] / 60,2);
}
$values=array(
"1" => $kwh[1],
"2" => $kwh[2],
"3" => $kwh[3],
"4" => $kwh[4],
"5" => $kwh[5],
"6" => $kwh[6],
"7" => $kwh[7],
"8" => $kwh[8],
"9" => $kwh[9],
"10" => $kwh[10],
"11" => $kwh[11],
"12" => $kwh[12],
"13" => $kwh[13],
"14" => $kwh[14],
"15" => $kwh[15],
"16" => $kwh[16],
"17" => $kwh[17],
"18" => $kwh[18],
"19" => $kwh[19],
"20" => $kwh[20],
"21" => $kwh[21],
"22" => $kwh[22],
"23" => $kwh[23],
"24" => $kwh[24],
"25" => $kwh[25],
"26" => $kwh[26],
"27" => $kwh[27],
"28" => $kwh[28],
"29" => $kwh[29],
"30" => $kwh[30],
"31" => $kwh[31]
);
$img_width=640;
$img_height=480;
$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,128,64);
$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);
?>
My code may even be able to be made simpler too (I'm new at this).
Not as nice looking as HighCharts can look though but for basic bar charts it's simple (just alter my code to suit and it'll work).