Changeset 284 for trunk/client/modules/Elezioni/grafici/jpgraph_scatter.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_scatter.php
r267 r284 1 <?php 1 <?php 2 2 /*======================================================================= 3 // File:JPGRAPH_SCATTER.PHP4 // Description: Scatter (and impuls) plot extension for JpGraph5 // Created:2001-02-116 // Ver: $Id: jpgraph_scatter.php 957 2007-12-01 14:00:29Z ljp $7 //8 // Copyright (c) Aditus Consulting. All rights reserved.9 //========================================================================10 */3 // File: JPGRAPH_SCATTER.PHP 4 // Description: Scatter (and impuls) plot extension for JpGraph 5 // Created: 2001-02-11 6 // Ver: $Id: jpgraph_scatter.php 1397 2009-06-27 21:34:14Z ljp $ 7 // 8 // Copyright (c) Asial Corporation. All rights reserved. 9 //======================================================================== 10 */ 11 11 require_once ('jpgraph_plotmark.inc.php'); 12 12 … … 20 20 public $iArrowSize = 2; 21 21 private $isizespec = array( 22 array(2,1),array(3,2),array(4,3),array(6,4),array(7,4),array(8,5),array(10,6),array(12,7),array(16,8),array(20,10)); 23 function FieldArrow() { 22 array(2,1),array(3,2),array(4,3),array(6,4),array(7,4),array(8,5),array(10,6),array(12,7),array(16,8),array(20,10) 23 ); 24 function __construct() { 25 // Empty 24 26 } 25 27 26 28 function SetSize($aSize,$aArrowSize=2) { 27 28 29 $this->iSize = $aSize; 30 $this->iArrowSize = $aArrowSize; 29 31 } 30 32 31 33 function SetColor($aColor) { 32 34 $this->iColor = $aColor; 33 35 } 34 36 35 37 function Stroke($aImg,$x,$y,$a) { 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 38 // First rotate the center coordinates 39 list($x,$y) = $aImg->Rotate($x,$y); 40 41 $old_origin = $aImg->SetCenter($x,$y); 42 $old_a = $aImg->a; 43 $aImg->SetAngle(-$a+$old_a); 44 45 $dx = round($this->iSize/2); 46 $c = array($x-$dx,$y,$x+$dx,$y); 47 $x += $dx; 48 49 list($dx,$dy) = $this->isizespec[$this->iArrowSize]; 50 $ca = array($x,$y,$x-$dx,$y-$dy,$x-$dx,$y+$dy,$x,$y); 51 52 $aImg->SetColor($this->iColor); 53 $aImg->Polygon($c); 54 $aImg->FilledPolygon($ca); 55 56 $aImg->SetCenter($old_origin[0],$old_origin[1]); 57 $aImg->SetAngle($old_a); 56 58 } 57 59 } … … 65 67 private $iAngles = array(); 66 68 private $iCallback = ''; 67 68 function FieldPlot($datay,$datax,$angles) {69 70 71 72 73 74 75 76 $this->Plot($datay,$datax);77 78 79 80 69 70 function __construct($datay,$datax,$angles) { 71 if( (count($datax) != count($datay)) ) 72 JpGraphError::RaiseL(20001);//("Fieldplots must have equal number of X and Y points."); 73 if( (count($datax) != count($angles)) ) 74 JpGraphError::RaiseL(20002);//("Fieldplots must have an angle specified for each X and Y points."); 75 76 $this->iAngles = $angles; 77 78 parent::__construct($datay,$datax); 79 $this->value->SetAlign('center','center'); 80 $this->value->SetMargin(15); 81 82 $this->arrow = new FieldArrow(); 81 83 } 82 84 83 85 function SetCallback($aFunc) { 84 86 $this->iCallback = $aFunc; 85 87 } 86 88 87 89 function Stroke($img,$xscale,$yscale) { 88 90 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 $this->arrow->SetColor($cc); 107 108 109 110 111 $yt = $yscale->Translate($this->coords[0][$i]); 112 113 114 115 116 } 117 91 // Remeber base color and size 92 $bc = $this->arrow->iColor; 93 $bs = $this->arrow->iSize; 94 $bas = $this->arrow->iArrowSize; 95 96 for( $i=0; $i<$this->numpoints; ++$i ) { 97 // Skip null values 98 if( $this->coords[0][$i]==="" ) 99 continue; 100 101 $f = $this->iCallback; 102 if( $f != "" ) { 103 list($cc,$cs,$cas) = call_user_func($f,$this->coords[1][$i],$this->coords[0][$i],$this->iAngles[$i]); 104 // Fall back on global data if the callback isn't set 105 if( $cc == "" ) $cc = $bc; 106 if( $cs == "" ) $cs = $bs; 107 if( $cas == "" ) $cas = $bas; 108 $this->arrow->SetColor($cc); 109 $this->arrow->SetSize($cs,$cas); 110 } 111 112 $xt = $xscale->Translate($this->coords[1][$i]); 113 $yt = $yscale->Translate($this->coords[0][$i]); 114 115 $this->arrow->Stroke($img,$xt,$yt,$this->iAngles[$i]); 116 $this->value->Stroke($img,$this->coords[0][$i],$xt,$yt); 117 } 118 } 119 118 120 // Framework function 119 121 function Legend($aGraph) { 120 121 122 123 124 } 122 if( $this->legend != "" ) { 123 $aGraph->legend->Add($this->legend,$this->mark->fill_color,$this->mark,0, 124 $this->legendcsimtarget,$this->legendcsimalt,$this->legendcsimwintarget); 125 } 126 } 125 127 } 126 128 … … 130 132 //=================================================== 131 133 class ScatterPlot extends Plot { 132 public $mark = '';134 public $mark,$link; 133 135 private $impuls = false; 134 private $linkpoints = false, $linkpointweight=1, $linkpointcolor="black"; 135 //--------------- 136 // CONSTRUCTOR 137 function ScatterPlot($datay,$datax=false) { 138 if( (count($datax) != count($datay)) && is_array($datax)) 139 JpGraphError::RaiseL(20003);//("Scatterplot must have equal number of X and Y points."); 140 $this->Plot($datay,$datax); 141 $this->mark = new PlotMark(); 142 $this->mark->SetType(MARK_SQUARE); 143 $this->mark->SetColor($this->color); 144 $this->value->SetAlign('center','center'); 145 $this->value->SetMargin(0); 146 } 147 148 //--------------- 149 // PUBLIC METHODS 136 //--------------- 137 // CONSTRUCTOR 138 function __construct($datay,$datax=false) { 139 if( is_array($datax) && (count($datax) != count($datay)) ) { 140 JpGraphError::RaiseL(20003);//("Scatterplot must have equal number of X and Y points."); 141 } 142 parent::__construct($datay,$datax); 143 $this->mark = new PlotMark(); 144 $this->mark->SetType(MARK_SQUARE); 145 $this->mark->SetColor($this->color); 146 $this->value->SetAlign('center','center'); 147 $this->value->SetMargin(0); 148 $this->link = new LineProperty(1,'black','solid'); 149 $this->link->iShow = false; 150 } 151 152 //--------------- 153 // PUBLIC METHODS 150 154 function SetImpuls($f=true) { 151 $this->impuls = $f; 152 } 155 $this->impuls = $f; 156 } 157 158 function SetStem($f=true) { 159 $this->impuls = $f; 160 } 153 161 154 162 // Combine the scatter plot points with a line 155 function SetLinkPoints($aFlag=true,$aColor="black",$aWeight=1) { 156 $this->linkpoints=$aFlag; 157 $this->linkpointcolor=$aColor; 158 $this->linkpointweight=$aWeight; 163 function SetLinkPoints($aFlag=true,$aColor="black",$aWeight=1,$aStyle='solid') { 164 $this->link->iShow = $aFlag; 165 $this->link->iColor = $aColor; 166 $this->link->iWeight = $aWeight; 167 $this->link->iStyle = $aStyle; 159 168 } 160 169 161 170 function Stroke($img,$xscale,$yscale) { 162 171 163 $ymin=$yscale->scale_abs[0]; 164 if( $yscale->scale[0] < 0 ) 165 $yzero=$yscale->Translate(0); 166 else 167 $yzero=$yscale->scale_abs[0]; 168 169 $this->csimareas = ''; 170 for( $i=0; $i<$this->numpoints; ++$i ) { 171 172 // Skip null values 173 if( $this->coords[0][$i]==='' || $this->coords[0][$i]==='-' || $this->coords[0][$i]==='x') 174 continue; 175 176 if( isset($this->coords[1]) ) 177 $xt = $xscale->Translate($this->coords[1][$i]); 178 else 179 $xt = $xscale->Translate($i); 180 $yt = $yscale->Translate($this->coords[0][$i]); 181 182 183 if( $this->linkpoints && isset($yt_old) ) { 184 $img->SetColor($this->linkpointcolor); 185 $img->SetLineWeight($this->linkpointweight); 186 $img->Line($xt_old,$yt_old,$xt,$yt); 187 } 188 189 if( $this->impuls ) { 190 $img->SetColor($this->color); 191 $img->SetLineWeight($this->weight); 192 $img->Line($xt,$yzero,$xt,$yt); 193 } 194 195 if( !empty($this->csimtargets[$i]) ) { 196 if( !empty($this->csimwintargets[$i]) ) { 197 $this->mark->SetCSIMTarget($this->csimtargets[$i],$this->csimwintargets[$i]); 198 } 199 else { 200 $this->mark->SetCSIMTarget($this->csimtargets[$i]); 201 } 202 $this->mark->SetCSIMAlt($this->csimalts[$i]); 203 } 204 205 if( isset($this->coords[1]) ) { 206 $this->mark->SetCSIMAltVal($this->coords[0][$i],$this->coords[1][$i]); 207 } 208 else { 209 $this->mark->SetCSIMAltVal($this->coords[0][$i],$i); 210 } 211 212 $this->mark->Stroke($img,$xt,$yt); 213 214 $this->csimareas .= $this->mark->GetCSIMAreas(); 215 $this->value->Stroke($img,$this->coords[0][$i],$xt,$yt); 216 217 $xt_old = $xt; 218 $yt_old = $yt; 219 } 220 } 221 172 $ymin=$yscale->scale_abs[0]; 173 if( $yscale->scale[0] < 0 ) 174 $yzero=$yscale->Translate(0); 175 else 176 $yzero=$yscale->scale_abs[0]; 177 178 $this->csimareas = ''; 179 for( $i=0; $i<$this->numpoints; ++$i ) { 180 181 // Skip null values 182 if( $this->coords[0][$i]==='' || $this->coords[0][$i]==='-' || $this->coords[0][$i]==='x') 183 continue; 184 185 if( isset($this->coords[1]) ) 186 $xt = $xscale->Translate($this->coords[1][$i]); 187 else 188 $xt = $xscale->Translate($i); 189 $yt = $yscale->Translate($this->coords[0][$i]); 190 191 192 if( $this->link->iShow && isset($yt_old) ) { 193 $img->SetColor($this->link->iColor); 194 $img->SetLineWeight($this->link->iWeight); 195 $old = $img->SetLineStyle($this->link->iStyle); 196 $img->StyleLine($xt_old,$yt_old,$xt,$yt); 197 $img->SetLineStyle($old); 198 } 199 200 if( $this->impuls ) { 201 $img->SetColor($this->color); 202 $img->SetLineWeight($this->weight); 203 $img->Line($xt,$yzero,$xt,$yt); 204 } 205 206 if( !empty($this->csimtargets[$i]) ) { 207 if( !empty($this->csimwintargets[$i]) ) { 208 $this->mark->SetCSIMTarget($this->csimtargets[$i],$this->csimwintargets[$i]); 209 } 210 else { 211 $this->mark->SetCSIMTarget($this->csimtargets[$i]); 212 } 213 $this->mark->SetCSIMAlt($this->csimalts[$i]); 214 } 215 216 if( isset($this->coords[1]) ) { 217 $this->mark->SetCSIMAltVal($this->coords[0][$i],$this->coords[1][$i]); 218 } 219 else { 220 $this->mark->SetCSIMAltVal($this->coords[0][$i],$i); 221 } 222 223 $this->mark->Stroke($img,$xt,$yt); 224 225 $this->csimareas .= $this->mark->GetCSIMAreas(); 226 $this->value->Stroke($img,$this->coords[0][$i],$xt,$yt); 227 228 $xt_old = $xt; 229 $yt_old = $yt; 230 } 231 } 232 222 233 // Framework function 223 234 function Legend($aGraph) { 224 225 226 227 228 } 235 if( $this->legend != "" ) { 236 $aGraph->legend->Add($this->legend,$this->mark->fill_color,$this->mark,0, 237 $this->legendcsimtarget,$this->legendcsimalt,$this->legendcsimwintarget); 238 } 239 } 229 240 } // Class 230 241 /* EOF */
Note:
See TracChangeset
for help on using the changeset viewer.