Subversion Repositories Applications.annuaire

Rev

Rev 66 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
66 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 1106 2009-02-22 20:16:35Z 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
    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
?>