source: trunk/xgraph/jpgraph/jpgraph_error.php @ 42

Last change on this file since 42 was 42, checked in by marrucho, 10 years ago
File size: 5.0 KB
Line 
1<?php
2/*=======================================================================
3 // File:        JPGRAPH_ERROR.PHP
4 // Description: Error plot extension for JpGraph
5 // Created:     2001-01-08
6 // Ver:         $Id: jpgraph_error.php 1106 2009-02-22 20:16:35Z ljp $
7 //
8 // Copyright (c) Asial Corporation. All rights reserved.
9 //========================================================================
10 */
11   
12//===================================================
13// CLASS ErrorPlot
14// Description: Error plot with min/max value for
15// each datapoint
16//===================================================
17class ErrorPlot extends Plot {
18    private $errwidth=2;
19   
20    //---------------
21    // CONSTRUCTOR
22    function __construct($datay,$datax=false) {
23        parent::__construct($datay,$datax);
24        $this->numpoints /= 2;
25    }
26    //---------------
27    // PUBLIC METHODS
28
29    // Gets called before any axis are stroked
30    function PreStrokeAdjust($graph) {
31        if( $this->center ) {
32            $a=0.5; $b=0.5;
33            ++$this->numpoints;
34        } else {
35            $a=0; $b=0;
36        }
37        $graph->xaxis->scale->ticks->SetXLabelOffset($a);
38        $graph->SetTextScaleOff($b);
39        //$graph->xaxis->scale->ticks->SupressMinorTickMarks();
40    }
41
42    // Method description
43    function Stroke($img,$xscale,$yscale) {
44        $numpoints=count($this->coords[0])/2;
45        $img->SetColor($this->color);
46        $img->SetLineWeight($this->weight);
47
48        if( isset($this->coords[1]) ) {
49            if( count($this->coords[1])!=$numpoints )
50            JpGraphError::RaiseL(2003,count($this->coords[1]),$numpoints);
51            //("Number of X and Y points are not equal. Number of X-points:".count($this->coords[1])." Number of Y-points:$numpoints");
52            else
53            $exist_x = true;
54        }
55        else
56        $exist_x = false;
57
58        for( $i=0; $i<$numpoints; ++$i) {
59            if( $exist_x )
60            $x=$this->coords[1][$i];
61            else
62            $x=$i;
63
64            if( !is_numeric($x) ||
65            !is_numeric($this->coords[0][$i*2]) || !is_numeric($this->coords[0][$i*2+1]) ) {
66                continue;
67            }
68
69            $xt = $xscale->Translate($x);
70            $yt1 = $yscale->Translate($this->coords[0][$i*2]);
71            $yt2 = $yscale->Translate($this->coords[0][$i*2+1]);
72            $img->Line($xt,$yt1,$xt,$yt2);
73            $img->Line($xt-$this->errwidth,$yt1,$xt+$this->errwidth,$yt1);
74            $img->Line($xt-$this->errwidth,$yt2,$xt+$this->errwidth,$yt2);
75        }
76        return true;
77    }
78} // Class
79
80
81//===================================================
82// CLASS ErrorLinePlot
83// Description: Combine a line and error plot
84// THIS IS A DEPRECATED PLOT TYPE JUST KEPT FOR
85// BACKWARD COMPATIBILITY
86//===================================================
87class ErrorLinePlot extends ErrorPlot {
88    public $line=null;
89    //---------------
90    // CONSTRUCTOR
91    function __construct($datay,$datax=false) {
92        parent::__construct($datay,$datax);
93        // Calculate line coordinates as the average of the error limits
94        $n = count($datay);
95        for($i=0; $i < $n; $i+=2 ) {
96            $ly[]=($datay[$i]+$datay[$i+1])/2;
97        }
98        $this->line=new LinePlot($ly,$datax);
99    }
100
101    //---------------
102    // PUBLIC METHODS
103    function Legend($graph) {
104        if( $this->legend != "" )
105        $graph->legend->Add($this->legend,$this->color);
106        $this->line->Legend($graph);
107    }
108     
109    function Stroke($img,$xscale,$yscale) {
110        parent::Stroke($img,$xscale,$yscale);
111        $this->line->Stroke($img,$xscale,$yscale);
112    }
113} // Class
114
115
116//===================================================
117// CLASS LineErrorPlot
118// Description: Combine a line and error plot
119//===================================================
120class LineErrorPlot extends ErrorPlot {
121    public $line=null;
122    //---------------
123    // CONSTRUCTOR
124    // Data is (val, errdeltamin, errdeltamax)
125    function __construct($datay,$datax=false) {
126        $ly=array(); $ey=array();
127        $n = count($datay);
128        if( $n % 3 != 0 ) {
129            JpGraphError::RaiseL(4002);
130            //('Error in input data to LineErrorPlot. Number of data points must be a multiple of 3');
131        }
132        for($i=0; $i < $n; $i+=3 ) {
133            $ly[]=$datay[$i];
134            $ey[]=$datay[$i]+$datay[$i+1];
135            $ey[]=$datay[$i]+$datay[$i+2];
136        }
137        parent::__construct($ey,$datax);
138        $this->line=new LinePlot($ly,$datax);
139    }
140
141    //---------------
142    // PUBLIC METHODS
143    function Legend($graph) {
144        if( $this->legend != "" )
145        $graph->legend->Add($this->legend,$this->color);
146        $this->line->Legend($graph);
147    }
148     
149    function Stroke($img,$xscale,$yscale) {
150        parent::Stroke($img,$xscale,$yscale);
151        $this->line->Stroke($img,$xscale,$yscale);
152    }
153} // Class
154
155
156/* EOF */
157?>
Note: See TracBrowser for help on using the repository browser.