PHPRO.ORG

Generate Bar Graph with PHP and GD

Generate Bar Graph with PHP and GD

Due to overwhelmning demand for GD related examples, this most requested of all generates a bar graph from an array of numbers. Of course these could easily be numbers from any source, and put into an array.



<?php 

  
// create an array of values for the chart. These values 
  // could come from anywhere, POST, GET, database etc. 
  
$values = array(23,32,35,57,12,3,36,54,32,15,43,24,30); 

  
// now we get the number of values in the array. this will 
  // tell us how many columns to plot 
    
$columns  count($values); 

  
// set the height and width of the graph image 

    
$width 300
    
$height 200

  
// Set the amount of space between each column 
    
$padding 5

  
// Get the width of 1 column 
    
$column_width $width $columns 

  
// set the graph color variables 
    
$im        imagecreate($width,$height); 
    
$gray      imagecolorallocate ($im,0xcc,0xcc,0xcc); 
    
$gray_lite imagecolorallocate ($im,0xee,0xee,0xee); 
    
$gray_dark imagecolorallocate ($im,0x7f,0x7f,0x7f); 
    
$white     imagecolorallocate ($im,0xff,0xff,0xff); 

  
// set the background color of the graph 
    
imagefilledrectangle($im,0,0,$width,$height,$white); 


  
// Calculate the maximum value we are going to plot 
  
$max_value max($values);

  
// loop over the array of columns 
    
for($i=0;$i<$columns;$i++) 
        {
    
// set the column hieght for each value 
        
$column_height = ($height 100) * (( $values[$i] / $max_value) *100); 
    
// now the coords
        
$x1 $i*$column_width
        
$y1 $height-$column_height
        
$x2 = (($i+1)*$column_width)-$padding
        
$y2 $height

        
// write the columns over the background 
        
imagefilledrectangle($im,$x1,$y1,$x2,$y2,$gray); 

        
// This gives the columns a little 3d effect 
        
imageline($im,$x1,$y1,$x1,$y2,$gray_lite); 
        
imageline($im,$x1,$y2,$x2,$y2,$gray_lite); 
        
imageline($im,$x2,$y1,$x2,$y2,$gray_dark); 
        } 

   
// set the correct png headers 
   
header ("Content-type: image/png"); 
  
// spit the image out the other end 
  
imagepng($im); 
?>