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