欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

php中用GD绘制折线图,gd绘制折线

程序员文章站 2022-03-28 12:27:44
...

php中用GD绘制折线图,gd绘制折线

php中用GD绘制折线图,代码如下:

  1 Class Chart{
  2     private $image; // 定义图像
  3     private $title; // 定义标题
  4     private $ydata; // 定义Y轴数据
  5     private $xdata; // 定义X轴数据
  6     private $seriesName; // 定义每个系列数据的名称
  7     private $color; // 定义条形图颜色
  8     private $bgcolor; // 定义图片背景颜色
  9     private $width; // 定义图片的宽
 10     private $height; // 定义图片的长
 11     
 12     /*
 13      * 构造函数 
 14      * String title 图片标题
 15      * Array xdata 索引数组,X轴数据
 16      * Array ydata 索引数组,数字数组,Y轴数据
 17      * Array series_name 索引数组,数据系列名称
 18      */
 19     function __construct($title,$xdata,$ydata,$seriesName) {        
 20         $this->title = $title;
 21         $this->xdata = $xdata;
 22         $this->ydata = $ydata;
 23         $this->seriesName = $seriesName;
 24         $this->color = array('#058DC7', '#50B432', '#ED561B', '#DDDF00', '#24CBE5', '#64E572', '#FF9655', '#FFF263', '#6AF9C4');
 25     }
 26     
 27     /*
 28      * 公有方法,设置条形图的颜色 
 29      * Array color 颜色数组,元素取值为'#058DC7'这种形式
 30      */
 31     function setBarColor($color){
 32         $this->color = $color;
 33     }
 34 /*
 35      * 绘制折线图
 36      */
 37     public function paintLineChart() {
 38         $ydataNum = $this->arrayNum($this->ydata); // 取得数据分组的个数
 39         $max = $this->arrayMax($this->ydata); // 取得所有呈现数据的最大值
 40         $max = ($max > 100)? $max : 100;
 41         $multi = $max/100; // 如果最大数据是大于100的则进行缩小处理        
 42         $barHeightMulti = 2.2; // 条形高缩放的比例
 43         $lineWidth = 50;
 44         $chartLeft = (1+strlen($max))*12; // 设置图片左边的margin
 45         
 46         $lineY = 250; // 初始化条形图的Y的坐标
 47         // 设置图片的宽、高
 48         //$this->width = $lineWidth*count($this->xdata) + $chartLeft - $lineWidth/1.6; 
 49         
 50         $margin = 10; // 小矩形描述右边margin
 51         $recWidth = 20; // 小矩形的宽
 52         $recHeight = 15; // 小矩形的高
 53         $space = 20; // 小矩形与条形图的间距
 54         $tmpWidth = 0;
 55         // 设置图片的宽、高
 56         $lineChartWidth =  $lineWidth*count($this->xdata) + $chartLeft - $lineWidth/1.6 ;
 57         // 两个系列数据以上的加上小矩形的宽
 58         if($ydataNum > 1) {
 59             $tmpWidth = $this->arrayLengthMax($this->seriesName)*10*4/3 + $space + $recWidth + + $margin;
 60         } 
 61         $this->width = $lineChartWidth + $tmpWidth; 
 62         
 63         $this->height = 300; 
 64         $this->image = imagecreatetruecolor($this->width ,$this->height); // 准备画布
 65         $this->bgcolor = imagecolorallocate($this->image,255,255,255); // 图片的背景颜色
 66         
 67         // 设置条形图的颜色
 68         $color = array();
 69         foreach($this->color as $col) {
 70             $col = substr($col,1,strlen($col)-1);
 71             $red = hexdec(substr($col,0,2));
 72             $green = hexdec(substr($col,2,2));
 73             $blue = hexdec(substr($col,4,2));
 74             $color[] = imagecolorallocate($this->image ,$red, $green, $blue);
 75         }
 76         
 77         // 设置线段的颜色、字体的颜色、字体的路径
 78         $lineColor = imagecolorallocate($this->image ,0xcc,0xcc,0xcc);
 79         $fontColor = imagecolorallocate($this->image, 0x95,0x8f,0x8f);
 80         $fontPath = 'font/simsun.ttc';
 81         
 82         imagefill($this->image,0,0,$this->bgcolor); // 绘画背景
 83         
 84         // 绘画图的分短线与左右边线
 85         for($i = 0; $i $i
相关标签: 库函数