博客搬家了,欢迎大家关注,https://bobjin.com

PHP中用GD绘制饼图,绘制的类见代码:

 Class Chart{
private $image; // 定义图像
private $title; // 定义标题
private $ydata; // 定义Y轴数据
private $xdata; // 定义X轴数据
private $color; // 定义条形图颜色
private $bgcolor; // 定义图片背景颜色
private $width; // 定义图片的宽
private $height; // 定义图片的长 /*
* 构造函数
* String title 图片标题
* Array xdata 索引数组,X轴数据
* Array ydata 索引数组,数字数组,Y轴数据
*/
function __construct($title,$xdata,$ydata) {
$this->title = $title;
$this->xdata = $xdata;
$this->ydata = $ydata;
$this->color = array('#058DC7', '#50B432', '#ED561B', '#DDDF00', '#24CBE5', '#64E572', '#FF9655', '#FFF263', '#6AF9C4');
} /*
* 公有方法,设置条形图的颜色
* Array color 颜色数组,元素取值为'#058DC7'这种形式
*/
function setBarColor($color){
$this->color = $color;
} /*
* 绘制饼图
*/
function mkPieChart() {
$sum = array_sum($this->ydata); // 获取ydata所有元素之和
$start = 0; // 弧的开始角度
$end = 0; // 弧的结束角度
$pieWidth = 300; // 椭圆的长轴
$pieHeight = 220; // 椭圆的短轴
$space = 40; // 椭圆与小矩形的间距
$margin = 20; // 图片的边距
$recWidth = 20; // 小矩形的宽
$recHeight = 15; // 小矩形的高
$titleHeight = 50; // 标题区域的高
// 图片自适应宽与高
$this->width = $pieWidth + $this->arrayLengthMax($this->xdata)*10*4/3 + $space + $recWidth +$margin;
$this->height = (($pieHeight > count($this->xdata)*25 ) ? $pieHeight : count($this->xdata)*25) + $titleHeight;
// 椭圆中心的坐标
$cx = $pieWidth/2+$margin;
$cy = $pieHeight/2+$titleHeight; $this->image = imagecreatetruecolor($this->width ,$this->height); // 准备画布
$this->bgcolor = imagecolorallocate($this->image,255,255,255); // 图片的背景颜色
imagefill($this->image,0,0,$this->bgcolor); // 填充背景 // 设置条形图的颜色
$color = array();
foreach($this->color as $col) {
$col = substr($col,1,strlen($col)-1);
$red = hexdec(substr($col,0,2));
$green = hexdec(substr($col,2,2));
$blue = hexdec(substr($col,4,2));
$color[] = imagecolorallocate($this->image ,$red, $green, $blue);
} // 设置线段的颜色、字体的颜色、字体的路径
$lineColor = imagecolorallocate($this->image ,0xcc,0xcc,0xcc);
$fontColor = imagecolorallocate($this->image, 0x95,0x8f,0x8f);
$fontPath = 'font/simsun.ttc'; // 绘制扇形弧
for($i = 0; $i < 10; $i++) {
foreach($this->ydata as $key => $val) {
$end += 360*$val/$sum;
imagefilledarc($this->image,$cx,$cy-$i,$pieWidth,$pieHeight, $start,$end,$color[$key%count($this->color)],IMG_ARC_PIE);
$start = $end;
}
} // 绘制小矩形及之后文字说明
$x1 = $pieWidth+$space;
$y1 = $titleHeight ;
foreach($this->ydata as $key => $val) {
imagefilledrectangle($this->image,$x1,$y1,$x1+$recWidth,$y1+$recHeight,$color[$key%count($this->color)]);
imagettftext($this->image,10,0,$x1+$recWidth+5,$y1+$recHeight-2,$fontColor,$fontPath,$this->xdata[$key]);
$y1 += $recHeight + 10;
} // 绘画标题
$titleStart = ($this->width - 5.5*strlen($this->title))/2;
imagettftext($this->image,11,0,$titleStart,20,$fontColor,$fontPath,$this->title); // 输出图片
header("Content-Type:image/png");
imagepng($this->image);
} /*
* 私有方法,求数组中元素长度最大的值
* Array arr 字符串数组,必须是汉字
*/
private function arrayLengthMax($arr) {
$length = 0;
foreach($arr as $val) {
$length = strlen($val) > $length ? strlen($val) : $length;
}
return $length/3;
} // 析构函数
function __destruct(){
imagedestroy($this->image);
}
}

测试代码如下:

 $xdata = array('测试一','测试二','测试三','测试四','测试五','测试六','测试七','测试八','测试九');
$ydata = array(89,90,90,23,35,45,56,23,56);
$Img = new Chart($title,$xdata,$ydata);
$Img->mkPieChart();

效果图如下:

aaarticlea/png;base64,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" alt="" />

博客搬家了,欢迎大家关注,https://bobjin.com

PHP中用GD绘制饼图的更多相关文章

  1. php中用GD绘制折线图

    php中用GD绘制折线图,代码如下: Class Chart{ private $image; // 定义图像 private $title; // 定义标题 private $ydata; // 定 ...

  2. Html5绘制饼图统计图

    这里要介绍的是一个jQuery插件:jquery.easysector.js Html5提供了强大的绘图API,让我们能够使用javascript轻松绘制各种图形.本文将主要讲解使用HTML5绘制饼图 ...

  3. 【Highcharts】 绘制饼图和漏斗图

    1.outModel类设计 设计outModel类首先研究下Highcharts中series的data数据格式,发现饼图和漏斗图都可以使用这样格式的数据 series: [{ name: 'Uniq ...

  4. 【带着canvas去流浪】 (3)绘制饼图

    目录 一. 任务说明 二. 重点提示 三. 示例代码 四. hover高亮的实现思路 示例代码托管在:http://www.github.com/dashnowords/blogs 博客园地址:< ...

  5. Python使用Plotly绘图工具,绘制饼图

    今天我们来学习一下如何使用Python的Plotly绘图工具,绘制饼图 使用Plotly绘制饼图的方法,我们需要使用graph_objs中的Pie函数 函数中最常用的两个属性values,用于赋值给需 ...

  6. Qt之自绘制饼图

    1.说明 最近在搞绘图方面的工作,说实话C++的第三方绘图库并不算多,总之我了解的有:qtcharts.ChartDirector.qwt.kdchart和QCustomPlot.这几个库各有利弊. ...

  7. QT绘制饼图

    QT版本:QT5.6.1 QT绘制饼图,出问题的代码如下 void DrawPieDialog::paintEvent(QPaintEvent *event) { float startAngle=0 ...

  8. HTML5绘制饼图示例(一)

    原文地址:http://www.2cto.com/kf/201108/100251.html HTML5引入Canvas元素,用于图形的绘制,我们可以仅仅基于HTML和JavaScript就能绘制出原 ...

  9. R绘图 第八篇:绘制饼图(ggplot2)

    geom_bar()函数不仅可以绘制条形图,还能绘制饼图,跟绘制条形图的区别是坐标系不同,绘制饼图使用的坐标系polar,并且设置theta="y": coord_polar(th ...

随机推荐

  1. Atitit usrQBM1603短信验证码规范

    Atitit usrQBM1603短信验证码规范 短信验证码扩展至短信服务和验证码服务1 主要方法1 参考模板1 短信验证码扩展至短信服务和验证码服务 主要方法 Line 27: public cla ...

  2. c#设计模式-观察者模式

    Observer 与 Subject 互为耦合,但是这种耦合的双方都依赖于抽象,而不依赖于具体. 一.观察者模式 目的 我们都知道解决一个问题有N种解决方式,但在面向对象的设计中如何能做到“高内聚,低 ...

  3. 关于WPF中RichTextBox失去焦点后如何保持高亮显示所选择的内容

    其实很简单,只要将容器控件中的附加属性FocusManager.IsFocusScope设为True就可以了 下面是个简单的用例: <Window x:Class="WpfApplic ...

  4. salesforce 零基础学习(三十八)Translate 的使用(国际化处理)

    本篇参考:http://resources.docs.salesforce.com/200/17/en-us/sfdc/pdf/salesforce_workbench_cheatsheet.pdf ...

  5. javascript闭包学习例子

    javascript中的闭包个很让人头疼的概念.总结一下 闭包是指有权访问一个函数作用域中的变量的函数.创建闭包最常见的方式,是在一个函数内部创建另一个函数,用return返回出去. 使用闭包可能造成 ...

  6. localStorage使用

    localStorage使用 需要注意的是,HTML5本地存储只能存字符串,任何格式存储的时候都会被自动转为字符串,所以读取的时候,需要自己进行类型的转换. 支持的情况如上图,IE在8.0的时候就支持 ...

  7. Python装饰器详解

    python中的装饰器是一个用得非常多的东西,我们可以把一些特定的方法.通用的方法写成一个个装饰器,这就为调用这些方法提供一个非常大的便利,如此提高我们代码的可读性以及简洁性,以及可扩展性. 在学习p ...

  8. codeforces B. Pasha and String(贪心)

    题意:给定一个长度为len的字符序列,然后是n个整数,对于每一个整数ai, 将字符序列区间为[ai,len-ai+1]进行反转.求出经过n次反转之后的序列! /* 思路1:将区间为偶数次的直接去掉!对 ...

  9. timus_1007_代码字

    题目要求:对于所有一个长度为N的字(这些字由0和1组成),在经过一条线路后,这些字可能会做如下的修改: 1. 0可能变成1,但只能发生一次. 2. 0或者1可能被去掉,但也只能发生一次. 3. 0或者 ...

  10. [转载]基于TFS实践敏捷-Scrum模式运用

    根据Forrester Research今年第二季度的一份研究报告,在超过1000名专业开发人员中,采用敏捷模式进行软件开发的已经有10.9%采用了Scrum模式,在所有的敏捷开发模式中名列首位,而在 ...