Ignore:
Timestamp:
Apr 13, 2019, 8:05:15 PM (6 years ago)
Author:
roby
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/client/modules/Elezioni/grafici/jpgraph_stock.php

    r2 r265  
    11<?php
    22/*=======================================================================
    3 // File:        JPGRAPH_STOCK.PHP
    4 // Description: Stock plot extension for JpGraph
    5 // Created:     2003-01-27
    6 // 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 */
    1111
    1212//===================================================
     
    1818    private $iEndLines=1;
    1919    private $iStockColor1='white',$iStockColor2='darkred',$iStockColor3='darkred';
    20 //---------------
    21 // CONSTRUCTOR
    22     function StockPlot($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         $this->Plot($datay,$datax);
    28         $this->numpoints /= $this->iTupleSize;
     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;
    2929    }
    30 //---------------
    31 // PUBLIC METHODS
    32        
     30    //---------------
     31    // PUBLIC METHODS
     32
    3333    function SetColor($aColor,$aColor1='white',$aColor2='darkred',$aColor3='darkred') {
    34         $this->color = $aColor;
    35         $this->iStockColor1 = $aColor1;
    36         $this->iStockColor2 = $aColor2;
    37         $this->iStockColor3 = $aColor3;
     34        $this->color = $aColor;
     35        $this->iStockColor1 = $aColor1;
     36        $this->iStockColor2 = $aColor2;
     37        $this->iStockColor3 = $aColor3;
    3838    }
    3939
    4040    function SetWidth($aWidth) {
    41         // Make sure it's odd
    42         $this->iWidth = 2*floor($aWidth/2)+1;
     41        // Make sure it's odd
     42        $this->iWidth = 2*floor($aWidth/2)+1;
    4343    }
    4444
    4545    function HideEndLines($aHide=true) {
    46         $this->iEndLines = !$aHide;
     46        $this->iEndLines = !$aHide;
    4747    }
    4848
    4949    // Gets called before any axis are stroked
    5050    function PreStrokeAdjust($graph) {
    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);                                           
     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);
    5959    }
    60        
     60
    6161    // Method description
    6262    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        }
    7477
    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        }
    8384
    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) {
    8688
    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;
    9691
    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);
    100100
    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]);
    113106
    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;
    125110
    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            }
    130125
    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);
    134127
    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;
    149163    }
    150164
     
    159173class BoxPlot extends StockPlot {
    160174    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);
    164179    }
    165180
    166181    function SetMedianColor($aPos,$aNeg) {
    167         $this->iPColor = $aPos;
    168         $this->iNColor = $aNeg;
     182        $this->iPColor = $aPos;
     183        $this->iNColor = $aNeg;
    169184    }
    170185
    171186    function ModBox($img,$xscale,$yscale,$i,$xl,$xr,$neg) {
    172         if( $neg )
    173             $img->SetColor($this->iNColor);
    174         else
    175             $img->SetColor($this->iPColor);
    176        
    177         $y = $yscale->Translate($this->coords[0][$i*5+4]);
    178         $img->Line($xl,$y,$xr,$y);
     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);
    179194    }
    180195}
Note: See TracChangeset for help on using the changeset viewer.