<?php /*======================================================================= // File: JPGRAPH_ERROR.PHP // Description: Error plot extension for JpGraph // Created: 2001-01-08 // Ver: $Id: jpgraph_error.php 1106 2009-02-22 20:16:35Z ljp $ // // Copyright (c) Aditus Consulting. All rights reserved. //======================================================================== */ //=================================================== // CLASS ErrorPlot // Description: Error plot with min/max value for // each datapoint //=================================================== class ErrorPlot extends Plot { private $errwidth=2; //--------------- // CONSTRUCTOR function __construct($datay,$datax=false) { parent::__construct($datay,$datax); $this->numpoints /= 2; } //--------------- // PUBLIC METHODS // Gets called before any axis are stroked function PreStrokeAdjust($graph) { if( $this->center ) { $a=0.5; $b=0.5; ++$this->numpoints; } else { $a=0; $b=0; } $graph->xaxis->scale->ticks->SetXLabelOffset($a); $graph->SetTextScaleOff($b); //$graph->xaxis->scale->ticks->SupressMinorTickMarks(); } // Method description function Stroke($img,$xscale,$yscale) { $numpoints=count($this->coords[0])/2; $img->SetColor($this->color); $img->SetLineWeight($this->weight); if( isset($this->coords[1]) ) { if( count($this->coords[1])!=$numpoints ) JpGraphError::RaiseL(2003,count($this->coords[1]),$numpoints); //("Number of X and Y points are not equal. Number of X-points:".count($this->coords[1])." Number of Y-points:$numpoints"); else $exist_x = true; } else $exist_x = false; for( $i=0; $i<$numpoints; ++$i) { if( $exist_x ) $x=$this->coords[1][$i]; else $x=$i; if( !is_numeric($x) || !is_numeric($this->coords[0][$i*2]) || !is_numeric($this->coords[0][$i*2+1]) ) { continue; } $xt = $xscale->Translate($x); $yt1 = $yscale->Translate($this->coords[0][$i*2]); $yt2 = $yscale->Translate($this->coords[0][$i*2+1]); $img->Line($xt,$yt1,$xt,$yt2); $img->Line($xt-$this->errwidth,$yt1,$xt+$this->errwidth,$yt1); $img->Line($xt-$this->errwidth,$yt2,$xt+$this->errwidth,$yt2); } return true; } } // Class //=================================================== // CLASS ErrorLinePlot // Description: Combine a line and error plot // THIS IS A DEPRECATED PLOT TYPE JUST KEPT FOR // BACKWARD COMPATIBILITY //=================================================== class ErrorLinePlot extends ErrorPlot { public $line=null; //--------------- // CONSTRUCTOR function __construct($datay,$datax=false) { parent::__construct($datay,$datax); // Calculate line coordinates as the average of the error limits $n = count($datay); for($i=0; $i < $n; $i+=2 ) { $ly[]=($datay[$i]+$datay[$i+1])/2; } $this->line=new LinePlot($ly,$datax); } //--------------- // PUBLIC METHODS function Legend($graph) { if( $this->legend != "" ) $graph->legend->Add($this->legend,$this->color); $this->line->Legend($graph); } function Stroke($img,$xscale,$yscale) { parent::Stroke($img,$xscale,$yscale); $this->line->Stroke($img,$xscale,$yscale); } } // Class //=================================================== // CLASS LineErrorPlot // Description: Combine a line and error plot //=================================================== class LineErrorPlot extends ErrorPlot { public $line=null; //--------------- // CONSTRUCTOR // Data is (val, errdeltamin, errdeltamax) function __construct($datay,$datax=false) { $ly=array(); $ey=array(); $n = count($datay); if( $n % 3 != 0 ) { JpGraphError::RaiseL(4002); //('Error in input data to LineErrorPlot. Number of data points must be a multiple of 3'); } for($i=0; $i < $n; $i+=3 ) { $ly[]=$datay[$i]; $ey[]=$datay[$i]+$datay[$i+1]; $ey[]=$datay[$i]+$datay[$i+2]; } parent::__construct($ey,$datax); $this->line=new LinePlot($ly,$datax); } //--------------- // PUBLIC METHODS function Legend($graph) { if( $this->legend != "" ) $graph->legend->Add($this->legend,$this->color); $this->line->Legend($graph); } function Stroke($img,$xscale,$yscale) { parent::Stroke($img,$xscale,$yscale); $this->line->Stroke($img,$xscale,$yscale); } } // Class /* EOF */ ?>