Ravens PHP Scripts: Forums
 

 

View next topic
View previous topic
Post new topic   Reply to topic    Ravens PHP Scripts And Web Hosting Forum Index -> PHP
Author Message
Donovan
Client



Joined: Oct 07, 2003
Posts: 735
Location: Ohio

PostPosted: Mon Jan 12, 2009 10:42 am Reply with quote

I have created a graph by following several of the excellent tutorials on using the GD library. One question I have is the X and Y values that appear on the graph. I can't find the function that writes these along each axis. I have my labels created to describe what these values are but the values themselves I can't seem to control the location. If I increase the size of the borders the values still hug the outside of the image and not the graph itself.

Here is what it looks like.


Image

The values along the X and Y axis need to hug the graph and not the border.

Here is my code.

Code:


# ------- Graph the values in the form of associative array
$sql = "SELECT MAX(`discri`) AS mmax, MIN(`discri`) AS mmin FROM question_stats WHERE quiz_id = '$qid'";
$res = $db->sql_query($sql);
if (!$res) {
      echo("<p>Error performing query: " . mysql_error() . "</p>");
      }
$row = $db->sql_fetchrow($res);
$min = $row['mmin'];
$max = $row['mmax'];
$ranges = get_ranges($min, $max);

$chart = $db->sql_query("SELECT `discri`, COUNT(`discri`) AS occurrence FROM question_stats WHERE quiz_id = '$qid' GROUP BY `discri` ORDER BY `discri`");   
while( $row = $db->sql_fetchrow($chart)) {   
    $base = get_base($row['discri']);       
    $values[$base] += $row['occurrence'];   
}

 //Setting the chart label variables
$graphTitle = "Discriminator";
$xLabel    = "Range ";
$yLabel    = "Questions";

# ----getting the size of the fonts
$Titlefontwidth  = imagefontwidth(2);
$Titlefontheight = imagefontheight(2);
$fontwidth  = imagefontwidth(2);
$fontheight = imagefontheight(2);

# ----getting the color of the fonts
$blue = imagecolorallocate($img, 3,12,94);

#-----setting the image dimensions
   $img_width=800;
   $img_height=600;
   $margins=40;

 
   # ---- 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=30;
   $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);

   }
   
#----Graph Title------------
imagestring($img, 4, 400, 20, $graphTitle, $blue);
 
#----X-Axis----------------
imagestring($img, 4, 400, 580, $xLabel, $blue);
 
#----Y-Axis----------------
imagestringup($img, 4, 20, 300, $yLabel, $blue);
 
 
 
   # ----------- 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);
 
View user's profile Send private message Visit poster's website ICQ Number
Palbin
Site Admin



Joined: Mar 30, 2006
Posts: 2583
Location: Pittsburgh, Pennsylvania

PostPosted: Mon Jan 12, 2009 11:46 am Reply with quote

http://www.partdigital.com/tutorials/bar-chart

_________________
"Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it." — Brian W. Kernighan. 
View user's profile Send private message
Display posts from previous:       
Post new topic   Reply to topic    Ravens PHP Scripts And Web Hosting Forum Index -> PHP

View next topic
View previous topic
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You can attach files in this forum
You can download files in this forum


Powered by phpBB © 2001-2007 phpBB Group
All times are GMT - 6 Hours
 
Forums ©