Changeset 284 for trunk/client/modules/Elezioni/grafici/jpgraph_stock.php
- Timestamp:
- Apr 21, 2019, 11:49:56 PM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/client/modules/Elezioni/grafici/jpgraph_stock.php
r267 r284 1 1 <?php 2 2 /*======================================================================= 3 // File:JPGRAPH_STOCK.PHP4 // Description:Stock plot extension for JpGraph5 // Created:2003-01-276 // Ver: $Id: jpgraph_stock.php 957 2007-12-01 14:00:29Z ljp $7 //8 // Copyright (c) Aditus Consulting. All rights reserved.9 //========================================================================10 */3 // File: JPGRAPH_STOCK.PHP 4 // Description: Stock plot extension for JpGraph 5 // Created: 2003-01-27 6 // Ver: $Id: jpgraph_stock.php 1364 2009-06-24 07:07:44Z ljp $ 7 // 8 // Copyright (c) Asial Corporation. All rights reserved. 9 //======================================================================== 10 */ 11 11 12 12 //=================================================== … … 18 18 private $iEndLines=1; 19 19 private $iStockColor1='white',$iStockColor2='darkred',$iStockColor3='darkred'; 20 //---------------21 // CONSTRUCTOR22 function StockPlot($datay,$datax=false) {23 24 25 //('Data values for Stock charts must contain an even multiple of '.$this->iTupleSize.' data points.');26 27 $this->Plot($datay,$datax);28 20 //--------------- 21 // CONSTRUCTOR 22 function __construct($datay,$datax=false) { 23 if( count($datay) % $this->iTupleSize ) { 24 JpGraphError::RaiseL(21001,$this->iTupleSize); 25 //('Data values for Stock charts must contain an even multiple of '.$this->iTupleSize.' data points.'); 26 } 27 parent::__construct($datay,$datax); 28 $this->numpoints /= $this->iTupleSize; 29 29 } 30 //---------------31 // PUBLIC METHODS32 30 //--------------- 31 // PUBLIC METHODS 32 33 33 function SetColor($aColor,$aColor1='white',$aColor2='darkred',$aColor3='darkred') { 34 35 36 37 34 $this->color = $aColor; 35 $this->iStockColor1 = $aColor1; 36 $this->iStockColor2 = $aColor2; 37 $this->iStockColor3 = $aColor3; 38 38 } 39 39 40 40 function SetWidth($aWidth) { 41 42 41 // Make sure it's odd 42 $this->iWidth = 2*floor($aWidth/2)+1; 43 43 } 44 44 45 45 function HideEndLines($aHide=true) { 46 46 $this->iEndLines = !$aHide; 47 47 } 48 48 49 49 // Gets called before any axis are stroked 50 50 function PreStrokeAdjust($graph) { 51 52 53 54 55 56 57 58 $graph->SetTextScaleOff($b); 51 if( $this->center ) { 52 $a=0.5; $b=0.5; 53 $this->numpoints++; 54 } else { 55 $a=0; $b=0; 56 } 57 $graph->xaxis->scale->ticks->SetXLabelOffset($a); 58 $graph->SetTextScaleOff($b); 59 59 } 60 60 61 61 // Method description 62 62 function Stroke($img,$xscale,$yscale) { 63 $n=$this->numpoints; 64 if( $this->center ) $n--; 65 if( isset($this->coords[1]) ) { 66 if( count($this->coords[1])!=$n ) 67 JpGraphError::RaiseL(2003,count($this->coords[1]),$n); 68 //("Number of X and Y points are not equal. Number of X-points:".count($this->coords[1])." Number of Y-points:$numpoints"); 69 else 70 $exist_x = true; 71 } 72 else 73 $exist_x = false; 63 $n=$this->numpoints; 64 if( $this->center ) $n--; 65 if( isset($this->coords[1]) ) { 66 if( count($this->coords[1])!=$n ) { 67 JpGraphError::RaiseL(2003,count($this->coords[1]),$n); 68 // ("Number of X and Y points are not equal. Number of X-points:".count($this->coords[1])." Number of Y-points:$numpoints"); 69 } 70 else { 71 $exist_x = true; 72 } 73 } 74 else { 75 $exist_x = false; 76 } 74 77 75 if( $exist_x ) 76 $xs=$this->coords[1][0]; 77 else 78 $xs=0; 79 80 $ts = $this->iTupleSize; 81 $this->csimareas = ''; 82 for( $i=0; $i<$n; ++$i) { 78 if( $exist_x ) { 79 $xs=$this->coords[1][0]; 80 } 81 else { 82 $xs=0; 83 } 83 84 84 //If value is NULL, then don't draw a bar at all 85 if ($this->coords[0][$i] === null) continue; 85 $ts = $this->iTupleSize; 86 $this->csimareas = ''; 87 for( $i=0; $i<$n; ++$i) { 86 88 87 if( $exist_x ) $x=$this->coords[1][$i]; 88 else $x=$i; 89 $xt = $xscale->Translate($x); 90 91 $neg = $this->coords[0][$i*$ts] > $this->coords[0][$i*$ts+1] ; 92 $yopen = $yscale->Translate($this->coords[0][$i*$ts]); 93 $yclose = $yscale->Translate($this->coords[0][$i*$ts+1]); 94 $ymin = $yscale->Translate($this->coords[0][$i*$ts+2]); 95 $ymax = $yscale->Translate($this->coords[0][$i*$ts+3]); 89 //If value is NULL, then don't draw a bar at all 90 if ($this->coords[0][$i*$ts] === null) continue; 96 91 97 $dx = floor($this->iWidth/2); 98 $xl = $xt - $dx; 99 $xr = $xt + $dx; 92 if( $exist_x ) { 93 $x=$this->coords[1][$i]; 94 if ($x === null) continue; 95 } 96 else { 97 $x=$i; 98 } 99 $xt = $xscale->Translate($x); 100 100 101 if( $neg ) 102 $img->SetColor($this->iStockColor3); 103 else 104 $img->SetColor($this->iStockColor1); 105 $img->FilledRectangle($xl,$yopen,$xr,$yclose); 106 $img->SetLineWeight($this->weight); 107 if( $neg ) 108 $img->SetColor($this->iStockColor2); 109 else 110 $img->SetColor($this->color); 111 112 $img->Rectangle($xl,$yopen,$xr,$yclose); 101 $neg = $this->coords[0][$i*$ts] > $this->coords[0][$i*$ts+1] ; 102 $yopen = $yscale->Translate($this->coords[0][$i*$ts]); 103 $yclose = $yscale->Translate($this->coords[0][$i*$ts+1]); 104 $ymin = $yscale->Translate($this->coords[0][$i*$ts+2]); 105 $ymax = $yscale->Translate($this->coords[0][$i*$ts+3]); 113 106 114 if( $yopen < $yclose ) { 115 $ytop = $yopen ; 116 $ybottom = $yclose ; 117 } 118 else { 119 $ytop = $yclose ; 120 $ybottom = $yopen ; 121 } 122 $img->SetColor($this->color); 123 $img->Line($xt,$ytop,$xt,$ymax); 124 $img->Line($xt,$ybottom,$xt,$ymin); 107 $dx = floor($this->iWidth/2); 108 $xl = $xt - $dx; 109 $xr = $xt + $dx; 125 110 126 if( $this->iEndLines ) { 127 $img->Line($xl,$ymax,$xr,$ymax); 128 $img->Line($xl,$ymin,$xr,$ymin); 129 } 111 if( $neg ) { 112 $img->SetColor($this->iStockColor3); 113 } 114 else { 115 $img->SetColor($this->iStockColor1); 116 } 117 $img->FilledRectangle($xl,$yopen,$xr,$yclose); 118 $img->SetLineWeight($this->weight); 119 if( $neg ) { 120 $img->SetColor($this->iStockColor2); 121 } 122 else { 123 $img->SetColor($this->color); 124 } 130 125 131 // A chance for subclasses to add things to the bar 132 // for data point i 133 $this->ModBox($img,$xscale,$yscale,$i,$xl,$xr,$neg); 126 $img->Rectangle($xl,$yopen,$xr,$yclose); 134 127 135 // Setup image maps 136 if( !empty($this->csimtargets[$i]) ) { 137 $this->csimareas.= '<area shape="rect" coords="'. 138 round($xl).','.round($ytop).','. 139 round($xr).','.round($ybottom).'" '; 140 $this->csimareas .= ' href="'.$this->csimtargets[$i].'"'; 141 if( !empty($this->csimalts[$i]) ) { 142 $sval=$this->csimalts[$i]; 143 $this->csimareas .= " title=\"$sval\" alt=\"$sval\" "; 144 } 145 $this->csimareas.= " />\n"; 146 } 147 } 148 return true; 128 if( $yopen < $yclose ) { 129 $ytop = $yopen ; 130 $ybottom = $yclose ; 131 } 132 else { 133 $ytop = $yclose ; 134 $ybottom = $yopen ; 135 } 136 $img->SetColor($this->color); 137 $img->Line($xt,$ytop,$xt,$ymax); 138 $img->Line($xt,$ybottom,$xt,$ymin); 139 140 if( $this->iEndLines ) { 141 $img->Line($xl,$ymax,$xr,$ymax); 142 $img->Line($xl,$ymin,$xr,$ymin); 143 } 144 145 // A chance for subclasses to add things to the bar 146 // for data point i 147 $this->ModBox($img,$xscale,$yscale,$i,$xl,$xr,$neg); 148 149 // Setup image maps 150 if( !empty($this->csimtargets[$i]) ) { 151 $this->csimareas.= '<area shape="rect" coords="'. 152 round($xl).','.round($ytop).','. 153 round($xr).','.round($ybottom).'" '; 154 $this->csimareas .= ' href="'.$this->csimtargets[$i].'"'; 155 if( !empty($this->csimalts[$i]) ) { 156 $sval=$this->csimalts[$i]; 157 $this->csimareas .= " title=\"$sval\" alt=\"$sval\" "; 158 } 159 $this->csimareas.= " />\n"; 160 } 161 } 162 return true; 149 163 } 150 164 … … 159 173 class BoxPlot extends StockPlot { 160 174 private $iPColor='black',$iNColor='white'; 161 function BoxPlot($datay,$datax=false) { 162 $this->iTupleSize=5; 163 parent::StockPlot($datay,$datax); 175 176 function __construct($datay,$datax=false) { 177 $this->iTupleSize=5; 178 parent::__construct($datay,$datax); 164 179 } 165 180 166 181 function SetMedianColor($aPos,$aNeg) { 167 168 182 $this->iPColor = $aPos; 183 $this->iNColor = $aNeg; 169 184 } 170 185 171 186 function ModBox($img,$xscale,$yscale,$i,$xl,$xr,$neg) { 172 if( $neg ) 173 174 175 176 177 178 187 if( $neg ) 188 $img->SetColor($this->iNColor); 189 else 190 $img->SetColor($this->iPColor); 191 192 $y = $yscale->Translate($this->coords[0][$i*5+4]); 193 $img->Line($xl,$y,$xr,$y); 179 194 } 180 195 }
Note:
See TracChangeset
for help on using the changeset viewer.