Subversion Repositories Sites.obs-saisons.fr

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 aurelien 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 782 2006-10-08 08:09:02Z ljp $
7
//
8
// Copyright (c) Aditus Consulting. 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
    var $errwidth=2;
19
//---------------
20
// CONSTRUCTOR
21
    function ErrorPlot(&$datay,$datax=false) {
22
	$this->Plot($datay,$datax);
23
	$this->numpoints /= 2;
24
    }
25
//---------------
26
// PUBLIC METHODS
27
 
28
    // Gets called before any axis are stroked
29
    function PreStrokeAdjust(&$graph) {
30
	if( $this->center ) {
31
	    $a=0.5; $b=0.5;
32
	    ++$this->numpoints;
33
	} else {
34
	    $a=0; $b=0;
35
	}
36
	$graph->xaxis->scale->ticks->SetXLabelOffset($a);
37
	$graph->SetTextScaleOff($b);
38
	//$graph->xaxis->scale->ticks->SupressMinorTickMarks();
39
    }
40
 
41
    // Method description
42
    function Stroke(&$img,&$xscale,&$yscale) {
43
	$numpoints=count($this->coords[0])/2;
44
	$img->SetColor($this->color);
45
	$img->SetLineWeight($this->weight);
46
 
47
	if( isset($this->coords[1]) ) {
48
	    if( count($this->coords[1])!=$numpoints )
49
		JpGraphError::RaiseL(2003,count($this->coords[1]),$numpoints);
50
//("Number of X and Y points are not equal. Number of X-points:".count($this->coords[1])." Number of Y-points:$numpoints");
51
	    else
52
		$exist_x = true;
53
	}
54
	else
55
	    $exist_x = false;
56
 
57
	for( $i=0; $i<$numpoints; ++$i) {
58
	    if( $exist_x )
59
		$x=$this->coords[1][$i];
60
	    else
61
		$x=$i;
62
 
63
	    if( !is_numeric($x) ||
64
		!is_numeric($this->coords[0][$i*2]) || !is_numeric($this->coords[0][$i*2+1]) ) {
65
		continue;
66
	    }
67
 
68
	    $xt = $xscale->Translate($x);
69
	    $yt1 = $yscale->Translate($this->coords[0][$i*2]);
70
	    $yt2 = $yscale->Translate($this->coords[0][$i*2+1]);
71
	    $img->Line($xt,$yt1,$xt,$yt2);
72
	    $img->Line($xt-$this->errwidth,$yt1,$xt+$this->errwidth,$yt1);
73
	    $img->Line($xt-$this->errwidth,$yt2,$xt+$this->errwidth,$yt2);
74
	}
75
	return true;
76
    }
77
} // Class
78
 
79
 
80
//===================================================
81
// CLASS ErrorLinePlot
82
// Description: Combine a line and error plot
83
// THIS IS A DEPRECATED PLOT TYPE JUST KEPT FOR
84
// BACKWARD COMPATIBILITY
85
//===================================================
86
class ErrorLinePlot extends ErrorPlot {
87
    var $line=null;
88
//---------------
89
// CONSTRUCTOR
90
    function ErrorLinePlot(&$datay,$datax=false) {
91
	$this->ErrorPlot($datay,$datax);
92
	// Calculate line coordinates as the average of the error limits
93
	$n = count($datay);
94
	for($i=0; $i < $n; $i+=2 ) {
95
	    $ly[]=($datay[$i]+$datay[$i+1])/2;
96
	}
97
	$this->line=new LinePlot($ly,$datax);
98
    }
99
 
100
//---------------
101
// PUBLIC METHODS
102
    function Legend(&$graph) {
103
	if( $this->legend != "" )
104
	    $graph->legend->Add($this->legend,$this->color);
105
	$this->line->Legend($graph);
106
    }
107
 
108
    function Stroke(&$img,&$xscale,&$yscale) {
109
	parent::Stroke($img,$xscale,$yscale);
110
	$this->line->Stroke($img,$xscale,$yscale);
111
    }
112
} // Class
113
 
114
 
115
//===================================================
116
// CLASS LineErrorPlot
117
// Description: Combine a line and error plot
118
//===================================================
119
class LineErrorPlot extends ErrorPlot {
120
    var $line=null;
121
//---------------
122
// CONSTRUCTOR
123
    // Data is (val, errdeltamin, errdeltamax)
124
    function LineErrorPlot(&$datay,$datax=false) {
125
	$ly=array(); $ey=array();
126
	$n = count($datay);
127
	if( $n % 3 != 0 ) {
128
	    JpGraphError::RaiseL(4002);
129
//('Error in input data to LineErrorPlot. Number of data points must be a multiple of 3');
130
	}
131
	for($i=0; $i < $n; $i+=3 ) {
132
	    $ly[]=$datay[$i];
133
	    $ey[]=$datay[$i]+$datay[$i+1];
134
	    $ey[]=$datay[$i]+$datay[$i+2];
135
	}
136
	$this->ErrorPlot($ey,$datax);
137
	$this->line=new LinePlot($ly,$datax);
138
    }
139
 
140
//---------------
141
// PUBLIC METHODS
142
    function Legend(&$graph) {
143
	if( $this->legend != "" )
144
	    $graph->legend->Add($this->legend,$this->color);
145
	$this->line->Legend($graph);
146
    }
147
 
148
    function Stroke(&$img,&$xscale,&$yscale) {
149
	parent::Stroke($img,$xscale,$yscale);
150
	$this->line->Stroke($img,$xscale,$yscale);
151
    }
152
} // Class
153
 
154
 
155
/* EOF */
156
?>