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 | //=================================================== |
---|
17 | class 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 | //=================================================== |
---|
87 | class 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 | //=================================================== |
---|
120 | class 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 | ?> |
---|