功能还比较简单,有兴趣可以随便扩展
用PHP生成图表<?php
用PHP生成图表
class MultiGraph{
用PHP生成图表    
public $border_color;
用PHP生成图表    
public $grid_color;
用PHP生成图表    
public $data_color;
用PHP生成图表    
public $g;
用PHP生成图表    
public $data;
用PHP生成图表    
public $draw_border=true;
用PHP生成图表    
public $horizontal_grid_segments=5;
用PHP生成图表    
public $vertical_grid_segments=0;
用PHP生成图表    
public $x=0;
用PHP生成图表    
public $y=0;
用PHP生成图表    
public $w=200;
用PHP生成图表    
public $h=100;
用PHP生成图表    
public $point_size=5;
用PHP生成图表    
public $y_axis_autolabel=true;
用PHP生成图表    
public $x_axis_autolabel=true;
用PHP生成图表    
public $font='arial.ttf';
用PHP生成图表    
public $fontsize=8;
用PHP生成图表    
public function __construct($graphics){
用PHP生成图表        
$this->g=$graphics;
用PHP生成图表        imageantialias(
$this->g,true);
用PHP生成图表    }
用PHP生成图表    
public function setDimensions($x,$y,$w,$h){
用PHP生成图表        
$this->x=$x;
用PHP生成图表        
$this->y=$y;
用PHP生成图表        
$this->w=$w;
用PHP生成图表        
$this->h=$h;
用PHP生成图表    }
用PHP生成图表    
public function drawLineGraph(){
用PHP生成图表        
$this->_drawborder();
用PHP生成图表        
$yscale=$this->_calcYscale();
用PHP生成图表        
$xscale=$this->_calcXscale();
用PHP生成图表        
$this->_drawHorizontal();
用PHP生成图表        
$this->_drawVertical();
用PHP生成图表        
$tmpdata=$this->data;
用PHP生成图表        
ksort($tmpdata);
用PHP生成图表        
list($ldx,$ldy)=each($tmpdata);
用PHP生成图表        
while (list($dx,$dy)=each($tmpdata)) {
用PHP生成图表            imageline(
$this->g,
用PHP生成图表                
$this->x+$ldx*$xscale,
用PHP生成图表                
$this->y+$this->y-$ldx*$yscale,
用PHP生成图表                
$this->x+$dx*$xscale,
用PHP生成图表                
$this_>y+$this->y-$dy*$yscale,
用PHP生成图表                
$this->data_color);
用PHP生成图表            
$ldx=$dx;
用PHP生成图表            
$ldy=$dy;
用PHP生成图表        }
用PHP生成图表    }
用PHP生成图表    
public function drawPointGraph(){
用PHP生成图表        
$this->_drawBorder();
用PHP生成图表        
$yscale=$this->_calcYscale();
用PHP生成图表        
$xscale=$this->_calcXscale();
用PHP生成图表        
$this->_drawHorizontal();
用PHP生成图表        
$this->_drawVertical();
用PHP生成图表        
foreach ($this->data as $dx=>$dy){
用PHP生成图表            imagefilledellipse(
$this->g,
用PHP生成图表                
$this->x+$dx*$xscale,
用PHP生成图表                
$this->y+$this->h-$dy*$yscale,
用PHP生成图表                
$this->point_size,
用PHP生成图表                
$this->point_size,
用PHP生成图表                
$this->data_color);
用PHP生成图表        }
用PHP生成图表    }
用PHP生成图表    
public function drawBarGraph(){
用PHP生成图表        
$this->_drawBorder();
用PHP生成图表        
$yscale=$this->_calcYscale();
用PHP生成图表        
$this->_drawHorizontal();
用PHP生成图表        
$section=(float)$this->w/count($this->data);
用PHP生成图表        
$bar=(int)($section*0.7);
用PHP生成图表        
$count=0;
用PHP生成图表        
foreach ($this->data as $label=>$val){
用PHP生成图表            
$count++;
用PHP生成图表            imagefilledrectangle(
$this->g,
用PHP生成图表                
$this->x+($section*$count)-$bar,
用PHP生成图表                
$this->y+$this->h,
用PHP生成图表                
$this->x+($section*$count),
用PHP生成图表                
$this->y+$this->h-$val*$yscale,
用PHP生成图表                
$this->data_color);
用PHP生成图表            imagerectangle(
$this->g,
用PHP生成图表                
$this-x+($section*$count)-$bar,
用PHP生成图表                
$this->y+$this->h,
用PHP生成图表                
$this->x+($section*$count),
用PHP生成图表                
$this->y+$this->h-$val*$yscale,
用PHP生成图表                
$this->border_color);
用PHP生成图表            
if ($this->x_axis_autolabel) {
用PHP生成图表                
$box=imagettfbbox($this->fontsize,270,$this->font,$label);
用PHP生成图表                
$texwidth=abs($box[4]-$box[0]);
用PHP生成图表                imagettftext(
$this->g,
用PHP生成图表                    
$this->fontsize,270,
用PHP生成图表                    (
$this->x+($section*$count)-($bar/2)-($texwidth/2)),
用PHP生成图表                    
$this->y+$this_>h+4,
用PHP生成图表                    
$this->border_color,
用PHP生成图表                    
$this->font,
用PHP生成图表                    
$label);
用PHP生成图表            }
用PHP生成图表        }
用PHP生成图表    }
用PHP生成图表    
private function _drawBorder(){
用PHP生成图表        
if ($this->draw_border) {
用PHP生成图表            imageline(
$this->g,
用PHP生成图表                
$this->x,
用PHP生成图表                
$this->y,
用PHP生成图表                
$this->x,
用PHP生成图表                
$this->h+$this->y,
用PHP生成图表                
$this->border_color);
用PHP生成图表            imageline(
$this->g,
用PHP生成图表                
$this->x,
用PHP生成图表                
$this->h+$this->y,
用PHP生成图表                
$this->w+$this->x,
用PHP生成图表                
$this->h+$this->y,
用PHP生成图表                
$this->border_color);
用PHP生成图表        }
用PHP生成图表    }
用PHP生成图表    
private function _calcYscale(){
用PHP生成图表        
return (float)$this->h/$this->_calcYMax();
用PHP生成图表    }
用PHP生成图表    
private function _calcXscale(){
用PHP生成图表        
return (float)$this->w/$this->_calcXMax();
用PHP生成图表    }
用PHP生成图表    
private function _calcYMax(){
用PHP生成图表        
$max=(float)max($this->data)*1.05;
用PHP生成图表        
$len=(float)((int)$max);
用PHP生成图表        
if ($len<2) {
用PHP生成图表            
return $max;
用PHP生成图表        }
else {
用PHP生成图表            
return intval(substr($max,0,2).str_repeat('0',$len-2));
用PHP生成图表        }
用PHP生成图表    }
用PHP生成图表    
private function _calcXMax(){
用PHP生成图表        
return max(array_keys($this->data));
用PHP生成图表    }
用PHP生成图表    
private function _drawHorizontal(){
用PHP生成图表        
if ($this->horizontal_grid_segments) {
用PHP生成图表            
foreach (range(1,$this->horizontal_grid_segments) as $hg){
用PHP生成图表                
$yheight=(int)$this->y+$this->h-($hg*($this->h/$this->horizontal_grid_segments));
用PHP生成图表                imageline(
$this->g,
用PHP生成图表                    
$this->x+1,
用PHP生成图表                    
$yheight,
用PHP生成图表                    
$this->w+$this-x,
用PHP生成图表                    
$yheight,
用PHP生成图表                    
$this->grid_color);
用PHP生成图表                
if ($this->y_axis_autolabel) {
用PHP生成图表                    
$ax_step=(int)($this->_calcYMax()/$this->horizontal_grid_segments)*$hg;
用PHP生成图表                    
$box=imagettfbbox($this->fontsize,0,
用PHP生成图表                        
$this->font,$ax_step);
用PHP生成图表                    
$texwidth=abs($box[4]-$box[0]);
用PHP生成图表                    
$texheight=abs($box[5]-$box[1]);
用PHP生成图表                    imagettftext(
$this->g,
用PHP生成图表                        
$this->fontsize,0,
用PHP生成图表                        
$this->x-3-$texwidth,
用PHP生成图表                        
$yheight+$texheight/2,
用PHP生成图表                        
$this->border_color,
用PHP生成图表                        
$this->font,
用PHP生成图表                        
$ax_step);
用PHP生成图表                }
用PHP生成图表            }
用PHP生成图表        }
用PHP生成图表    }
用PHP生成图表    
private function _drawVertical(){
用PHP生成图表        
if ($this->vertical_grid_segments) {
用PHP生成图表            
foreach (range(1,$this->vertical_grid_segments) as $vg){
用PHP生成图表                
$xloc=(int)($this->x+($vg*($this->w/$this->vertical_grid_segments)));
用PHP生成图表                imageline(
$this->g,
用PHP生成图表                    
$xloc,
用PHP生成图表                    
$this->y,
用PHP生成图表                    
$xloc,
用PHP生成图表                    
$this->y+$this->h-1,
用PHP生成图表                    
$this->grid_color);
用PHP生成图表                
if ($this->x_axis_autolabel) {
用PHP生成图表                    
$ax_step=(int)(($this->_calcXMax()/$this->vertical_grid_segments)*$vg);
用PHP生成图表                    
$box=imagettfbbox($this->fontsize,270,$this->font,$ax_step);
用PHP生成图表                    
$texwidth=abs($box[4]-$box[0]);
用PHP生成图表                    imagettftext(
$this->g,
用PHP生成图表                        
$this->fontsize,270,
用PHP生成图表                        
$xloc-$texwidth/2,
用PHP生成图表                        
$this->y+$this->h+3,
用PHP生成图表                        
$this->border_color,
用PHP生成图表                        
$this->font,
用PHP生成图表                        
$ax_step);
用PHP生成图表                }
用PHP生成图表            }
用PHP生成图表        }
用PHP生成图表    }
用PHP生成图表}
用PHP生成图表
?>

实例:

用PHP生成图表<?php
用PHP生成图表
require_once('MultiGraph.php');
用PHP生成图表
$gfx=imagecreatetruecolor(950,650);
用PHP生成图表
$red=imagecolorallocate($gfx,255,0,0);
用PHP生成图表
$manilla=imagecolorallocate($gfx,255,255,245);
用PHP生成图表
$black=imagecolorallocate($gfx,0,0,0);
用PHP生成图表
$lgray=imagecolorallocate($gfx,200,200,200);
用PHP生成图表imagefill(
$gfx,0,0,$manilla);
用PHP生成图表
$graph=new MultiGraph($gfx);
用PHP生成图表
$graph->border_color=$black;
用PHP生成图表
$graph->grid_color=$lgray;
用PHP生成图表
$graph->data_color=$red;
用PHP生成图表
$graph->vertical_grid_segments=10;
用PHP生成图表
$graph->font='MSYH.ttf';
用PHP生成图表
$chartdata=array();
用PHP生成图表
for ($i=0;$i<50;$i++){
用PHP生成图表    
$chartdata[rand(1,200)]=rand(1,1000);
用PHP生成图表}
用PHP生成图表
$graph->data=$chartdata;
用PHP生成图表
$graph->setDimensions(50,50,300,200);
用PHP生成图表
$graph->drawLineGraph();
用PHP生成图表
$graph->horizontal_grid_segments=9;
用PHP生成图表
$graph->vertical_grid_segments=15;
用PHP生成图表
$graph->setDimensions(50,350,300,200);
用PHP生成图表
$graph->drawPointGraph();
用PHP生成图表
$bardata=array();
用PHP生成图表
foreach (range(1,12as $mon){
用PHP生成图表    
$bardata[date('F',mktime(0,0,0,$mon))]=rand(1,5000);
用PHP生成图表}
用PHP生成图表
$cyan=imagecolorallocate($gfx,0,255,255);
用PHP生成图表
$graph->data_color=$cyan;
用PHP生成图表
$graph->fontsize=11;
用PHP生成图表
$graph->horizontal_grid_segments=12;
用PHP生成图表
$graph->setDimensions(450,40,400,500);
用PHP生成图表
$graph->data=$bardata;
用PHP生成图表
$graph->drawBarGraph();
用PHP生成图表
header('Content-type:image/png');
用PHP生成图表imagepng(
$gfx);
用PHP生成图表
?>

相关文章:

  • 2022-12-23
  • 2022-01-02
  • 2021-12-04
  • 2021-11-23
  • 2021-11-19
  • 2022-01-03
  • 2022-03-05
猜你喜欢
  • 2021-12-04
  • 2022-12-23
  • 2021-11-23
  • 2021-12-11
  • 2021-11-03
相关资源
相似解决方案