http://forlornly.net/ http://forlornly.net/


[ index ] [ lifestyle ] [ projects ] [ resumé ] [ playground ] [ contact ]
Paper Clip (note1.gif)

Siemens-wiki-graph

description

a simple graph builder for a Siemens MPS4 reporting tool. yes, I know there are several tools for building graphs out there :) what can i say? now there's one more :)

result

Siemens-wiki-graph exmaple

code

<?php

/*
 * Siemens-wiki-graph.php
 *   - simple graph builder
 *
 * Author  : Andrei Gavrila (andrei.gavrila@gmail.com)
 * Date    : 2006.12.03
 * Licence : GPL 2.0
 *
 * Changes :
 *   - []
 */

include('../../../_include/Include.inc.php');

/*
 *
 */

header("Content-type: image/png");

$data = array();
$label_x = array();
for (
$i 1$i 32$i++) {
  
$data[$i]['x'] = $i;
  
$data[$i]['y'] = rand(410);
}

$img imagecreatetruecolor(400200);
$img graph($imgimagecolorallocate($img255255255),
             
"Andrei Gavrila [ayterminal]"3imagecolorallocate($img255,   0,   0),
             
"hours / day",                 3imagecolorallocate($img255,   0,   0),
             
"number of hours"2imagecolorallocate($img,   0,   0,   0),
             
"days",            2imagecolorallocate($img,   0,   0,   0),
             
$data032016imagecolorallocate($img255,   0,   0),
             
1imagecolorallocate($img,   0,   0,   0),
             
1imagecolorallocate($img,   0,   0,   0));
imagepng($img);
imagedestroy($img);

/*
 *
 */
function graph($img$color_bg,
  
$text_1$text_font_1$text_color_1,
  
$text_2$text_font_2$text_color_2,
  
$text_w$text_font_w$text_color_w,
  
$text_h$text_font_h$text_color_h,
  
$data$data_x_min$data_x_max$data_y_min$data_y_max$data_line_color,
  
$text_font_x$text_color_x
  
$text_font_y$text_color_y)
{
  
$w imagesx($img);
  
$h imagesy($img);

  
imagefill($img00$color_bg);

  
// Title and description
  //
  
imagestring($img$text_font_1$w strlen($text_1)*imagefontwidth($text_font_1) - 1010$text_1$text_color_1);
  
imagestring($img$text_font_2$w strlen($text_2)*imagefontwidth($text_font_2) - 1030$text_2$text_color_2);

  
// Asix (text and lines)
  //

  
imagestring($img$text_font_w1030$text_w$text_color_w);
  
imagestring($img$text_font_h$w strlen($text_h)*imagefontwidth($text_font_h) - 10$h 20$text_h$text_color_h);

  
imagesetthickness($img2);
  
imageline($img,  20$h 20,      20,      50$text_color_x);
  
imageline($img,  10$h 30$w 10$h 30$text_color_y);

  
// Data
  //

  
imagesetthickness($img1);

  
$factor_x = ($w 20 10)/($data_x_max $data_x_min);
  
$factor_y = ($h 50 30)/($data_y_max $data_y_min);

  
$first true;

  foreach (
$data as $a => $b) {
    if (
$first) {
      
$first false;
    }
    else {
      
imageline($img20 $x$h 30 $y20 + ($b['x'] + $data_x_min)*$factor_x$h 30 - ($b['y'] + $data_y_min)*$factor_y$data_line_color);
    }

    
$x = ($b['x'] + $data_x_min)*$factor_x;
    
$y = ($b['y'] + $data_y_min)*$factor_y;
  }

  
// Labels
  //

  
for ($i $data_x_min 1$i $data_x_max$i++) {
    
imageline($img20 $i*$factor_x$h 3320 $i*$factor_x$h 27$text_color_x);

    
imagestring($img$text_font_x20 $i*$factor_x - (strlen($i)*imagefontwidth($text_font_x))/2$h 25$i$text_color_x);
  }

  for (
$i $data_y_min 1$i $data_y_max$i++) {
    
imageline($img17$h 30 $i*$factor_y23$h 30 $i*$factor_y$text_color_y);

    
imagestring($img$text_font_y+ (strlen($i))*imagefontwidth($text_font_y), $h 30 $i*$factor_y - (imagefontheight($text_font_y))/2$i$text_color_y);
  }

  return 
$img;
}