⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jpgraph_bar.php

📁 jsp程序开发系统
💻 PHP
📖 第 1 页 / 共 2 页
字号:
		$this->csimareas .= " alt=\"$sval\" title=\"$sval\" ";	    }	    $this->csimareas .= ">\n";	}	return true;    }} // Class//===================================================// CLASS GroupBarPlot// Description: Produce grouped bar plots//===================================================class GroupBarPlot extends BarPlot {    var $plots;    var $width=0.7;    var $nbrplots=0;    var $numpoints;//---------------// CONSTRUCTOR    function GroupBarPlot($plots) {	$this->plots = $plots;	$this->nbrplots = count($plots);	$this->numpoints = $plots[0]->numpoints;    }//---------------// PUBLIC METHODS	    function Legend(&$graph) {	$n = count($this->plots);	for($i=0; $i<$n; ++$i)	    $this->plots[$i]->DoLegend($graph);    }	    function Min() {	list($xmin,$ymin) = $this->plots[0]->Min();	$n = count($this->plots);	for($i=0; $i<$n; ++$i) {	    list($xm,$ym) = $this->plots[$i]->Min();	    $xmin = max($xmin,$xm);	    $ymin = min($ymin,$ym);	}	return array($xmin,$ymin);		    }	    function Max() {	list($xmax,$ymax) = $this->plots[0]->Max();	$n = count($this->plots);	for($i=0; $i<$n; ++$i) {	    list($xm,$ym) = $this->plots[$i]->Max();	    $xmax = max($xmax,$xm);	    $ymax = max($ymax,$ym);	}	return array($xmax,$ymax);    }	    function GetCSIMareas() {	$n = count($this->plots);	$csimareas='';	for($i=0; $i < $n; ++$i) {	    $csimareas .= $this->plots[$i]->csimareas;	}	return $csimareas;    }	    // Stroke all the bars next to each other    function Stroke(&$img,&$xscale,&$yscale) { 	$tmp=$xscale->off;	$n = count($this->plots);	$subwidth = $this->width/$this->nbrplots ; 	for( $i=0; $i < $n; ++$i ) {	    $this->plots[$i]->ymin=$this->ybase;	    $this->plots[$i]->SetWidth($subwidth);	    	    // If the client have used SetTextTickInterval() then	    // major_step will be > 1 and the positioning will fail.	    // If we assume it is always one the positioning will work	    // fine with a text scale but this will not work with	    // arbitrary linear scale	    $xscale->off = $tmp+$i*round(/*$xscale->ticks->major_step* */					 $xscale->scale_factor*$subwidth);	    $this->plots[$i]->Stroke($img,$xscale,$yscale);	}	$xscale->off=$tmp;    }} // Class//===================================================// CLASS AccBarPlot// Description: Produce accumulated bar plots//===================================================class AccBarPlot extends BarPlot {    var $plots=null,$nbrplots=0,$numpoints=0;//---------------// CONSTRUCTOR    function AccBarPlot($plots) {	$this->plots = $plots;	$this->nbrplots = count($plots);	$this->numpoints = $plots[0]->numpoints;			$this->value = new DisplayValue();    }//---------------// PUBLIC METHODS	    function Legend(&$graph) {	$n = count($this->plots);	for( $i=$n-1; $i>=0; --$i ) 	    $this->plots[$i]->DoLegend($graph);    }    function Max() {	list($xmax) = $this->plots[0]->Max();	$nmax=0;	for($i=0; $i<count($this->plots); ++$i) {	    $n = count($this->plots[$i]->coords[0]);	    $nmax = max($nmax,$n);	    list($x) = $this->plots[$i]->Max();	    $xmax = max($xmax,$x);	}	for( $i = 0; $i < $nmax; $i++ ) {	    // Get y-value for bar $i by adding the	    // individual bars from all the plots added.	    // It would be wrong to just add the	    // individual plots max y-value since that	    // would in most cases give to large y-value.	    $y=$this->plots[0]->coords[0][$i];	    for( $j = 1; $j < $this->nbrplots; $j++ ) {		$y += $this->plots[ $j ]->coords[0][$i];	    }	    $ymax[$i] = $y;	}	$ymax = max($ymax);	// Bar always start at baseline	if( $ymax <= $this->ybase ) 	    $ymax = $this->ybase;	return array($xmax,$ymax);    }    function Min() {	$nmax=0;	list($xmin,$ysetmin) = $this->plots[0]->Min();	for($i=0; $i<count($this->plots); ++$i) {	    $n = count($this->plots[$i]->coords[0]);	    $nmax = max($nmax,$n);	    list($x,$y) = $this->plots[$i]->Min();	    $xmin = Min($xmin,$x);	    $ysetmin = Min($y,$ysetmin);	}	for( $i = 0; $i < $nmax; $i++ ) {	    // Get y-value for bar $i by adding the	    // individual bars from all the plots added.	    // It would be wrong to just add the	    // individual plots max y-value since that	    // would in most cases give to large y-value.	    $y=$this->plots[0]->coords[0][$i];	    for( $j = 1; $j < $this->nbrplots; $j++ ) {		$y += $this->plots[ $j ]->coords[0][$i];	    }	    $ymin[$i] = $y;	}	$ymin = Min($ysetmin,Min($ymin));	// Bar always start at baseline	if( $ymin >= $this->ybase )	    $ymin = $this->ybase;	return array($xmin,$ymin);    }    // Stroke acc bar plot    function Stroke(&$img,&$xscale,&$yscale) {	$img->SetLineWeight($this->weight);	for($i=0; $i<$this->numpoints-1; $i++) {	    $accy = 0;	    $accy_neg = 0; 	    for($j=0; $j < $this->nbrplots; ++$j ) {					    		$img->SetColor($this->plots[$j]->color);		if ( $this->plots[$j]->coords[0][$i] >= 0) {		    $yt=$yscale->Translate($this->plots[$j]->coords[0][$i]+$accy);		    $accyt=$yscale->Translate($accy);		    $accy+=$this->plots[$j]->coords[0][$i];		}		if ( $this->plots[$j]->coords[0][$i] < 0 || $accy_neg < 0 ) {		    $yt=$yscale->Translate($this->plots[$j]->coords[0][$i]+$accy_neg);		    $accyt=$yscale->Translate($accy_neg);		    $accy_neg+=$this->plots[$j]->coords[0][$i];		}										$xt=$xscale->Translate($i);		if( $this->abswidth > -1 )		    $abswidth=$this->abswidth;		else		    $abswidth=round($this->width*$xscale->scale_factor,0);				$pts=array($xt,$accyt,$xt,$yt,$xt+$abswidth,$yt,$xt+$abswidth,$accyt);		if( $this->bar_shadow ) {		    $ssh = $this->bar_shadow_hsize;		    $ssv = $this->bar_shadow_vsize;		    		    // We must also differ if we are a positive or negative bar. 		    if( $j === 0 ) {			// This gets extra complicated since we have to			// see all plots to see if we are negative. It could			// for example be that all plots are 0 until the very			// last one. We therefore need to save the initial setup			// for both the negative and positive case			// In case the final bar is positive			$sp[0]=$pts[6]+1; $sp[1]=$pts[7];			$sp[2]=$pts[6]+$ssh; $sp[3]=$pts[7]-$ssv;			// In case the final bar is negative			$nsp[0]=$pts[0]; $nsp[1]=$pts[1];			$nsp[2]=$pts[0]+$ssh; $nsp[3]=$pts[1]-$ssv;			$nsp[4]=$pts[6]+$ssh; $nsp[5]=$pts[7]-$ssv;			$nsp[10]=$pts[6]+1; $nsp[11]=$pts[7];		    }		    if( $j === $this->nbrplots-1 ) {			// If this is the last plot of the bar and			// the total value is larger than 0 then we			// add the shadow.			if( $accy > 0 ) {			    $sp[4]=$pts[4]+$ssh; $sp[5]=$pts[5]-$ssv;			    $sp[6]=$pts[2]+$ssh; $sp[7]=$pts[3]-$ssv;			    $sp[8]=$pts[2]; $sp[9]=$pts[3]-1;			    $sp[10]=$pts[4]+1; $sp[11]=$pts[5];			    $img->PushColor($this->bar_shadow_color);			    $img->FilledPolygon($sp,4);			    $img->PopColor();			}			elseif( $accy_neg < 0 ) {			    $nsp[6]=$pts[4]+$ssh; $nsp[7]=$pts[5]-$ssv;			    $nsp[8]=$pts[4]+1; $nsp[9]=$pts[5];			    $img->PushColor($this->bar_shadow_color);			    $img->FilledPolygon($nsp,4);			    $img->PopColor();			}		    }		}		// If value is NULL or 0, then don't draw a bar at all		if ($this->plots[$j]->coords[0][$i] == 0 ) continue;		if( $this->plots[$j]->grad ) {		    $grad = new Gradient($img);		    $grad->FilledRectangle(			$pts[2],$pts[3],			$pts[6],$pts[7],			$this->plots[$j]->grad_fromcolor,			$this->plots[$j]->grad_tocolor,			$this->plots[$j]->grad_style);						} elseif ($this->plots[$j]->fill_color ) {		    $img->SetColor($this->plots[$j]->fill_color);		    $img->FilledPolygon($pts);		    $img->SetColor($this->plots[$j]->color);		}				  		// CSIM array		if( $i < count($this->plots[$j]->csimtargets) ) {		    // Create the client side image map		    $rpts = $img->ArrRotate($pts);				    $csimcoord=round($rpts[0]).", ".round($rpts[1]);		    for( $k=1; $k < 4; ++$k){			$csimcoord .= ", ".round($rpts[2*$k]).", ".round($rpts[2*$k+1]);		    }	    	    		    $this->csimareas.= '<area shape="poly" coords="'.$csimcoord.'" '; 		    $this->csimareas.= " href=\"".$this->plots[$j]->csimtargets[$i]."\"";		    if( !empty($this->plots[$j]->csimalts[$i]) ) {			$sval=sprintf($this->plots[$j]->csimalts[$i],$this->plots[$j]->coords[0][$i]);			$this->csimareas .= " alt=\"$sval\" title=\"$sval\" ";		    }		    $this->csimareas .= ">\n";						}		$pts[] = $pts[0];		$pts[] = $pts[1];		$img->Polygon($pts);	    }			    // Draw labels for each acc.bar		    $x=$pts[2]+($pts[4]-$pts[2])/2;	    $y=$yscale->Translate($accy);				    if($this->bar_shadow) $x += $ssh;	    $this->value->Stroke($img,$accy,$x,$y);	    $accy = 0;	    $accy_neg = 0; 	    for($j=0; $j<$this->nbrplots; ++$j ) {						if ($this->plots[$j]->coords[0][$i] > 0) {		    $yt=$yscale->Translate($this->plots[$j]->coords[0][$i]+$accy);		    $accyt=$yscale->Translate($accy);		    $y = $accyt-($accyt-$yt)/2;		    $accy+=$this->plots[$j]->coords[0][$i];		} else {		    $yt=$yscale->Translate($this->plots[$j]->coords[0][$i]+$accy_neg);		    $accyt=$yscale->Translate($accy_neg);		    $y=0;		    $accy_neg+=$this->plots[$j]->coords[0][$i];		}			$this->plots[$j]->value->SetAlign("center","center");		$this->plots[$j]->value->SetMargin(0);		$this->plots[$j]->value->Stroke($img,$this->plots[$j]->coords[0][$i],$x,$y);	    }	}	return true;    }} // Class/* EOF */?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -