PHP中用GD绘制饼图
博客搬家了,欢迎大家关注,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绘制饼图的更多相关文章
- php中用GD绘制折线图
php中用GD绘制折线图,代码如下: Class Chart{ private $image; // 定义图像 private $title; // 定义标题 private $ydata; // 定 ...
- Html5绘制饼图统计图
这里要介绍的是一个jQuery插件:jquery.easysector.js Html5提供了强大的绘图API,让我们能够使用javascript轻松绘制各种图形.本文将主要讲解使用HTML5绘制饼图 ...
- 【Highcharts】 绘制饼图和漏斗图
1.outModel类设计 设计outModel类首先研究下Highcharts中series的data数据格式,发现饼图和漏斗图都可以使用这样格式的数据 series: [{ name: 'Uniq ...
- 【带着canvas去流浪】 (3)绘制饼图
目录 一. 任务说明 二. 重点提示 三. 示例代码 四. hover高亮的实现思路 示例代码托管在:http://www.github.com/dashnowords/blogs 博客园地址:< ...
- Python使用Plotly绘图工具,绘制饼图
今天我们来学习一下如何使用Python的Plotly绘图工具,绘制饼图 使用Plotly绘制饼图的方法,我们需要使用graph_objs中的Pie函数 函数中最常用的两个属性values,用于赋值给需 ...
- Qt之自绘制饼图
1.说明 最近在搞绘图方面的工作,说实话C++的第三方绘图库并不算多,总之我了解的有:qtcharts.ChartDirector.qwt.kdchart和QCustomPlot.这几个库各有利弊. ...
- QT绘制饼图
QT版本:QT5.6.1 QT绘制饼图,出问题的代码如下 void DrawPieDialog::paintEvent(QPaintEvent *event) { float startAngle=0 ...
- HTML5绘制饼图示例(一)
原文地址:http://www.2cto.com/kf/201108/100251.html HTML5引入Canvas元素,用于图形的绘制,我们可以仅仅基于HTML和JavaScript就能绘制出原 ...
- R绘图 第八篇:绘制饼图(ggplot2)
geom_bar()函数不仅可以绘制条形图,还能绘制饼图,跟绘制条形图的区别是坐标系不同,绘制饼图使用的坐标系polar,并且设置theta="y": coord_polar(th ...
随机推荐
- Objective-C 随机数
有个项目要给客户发送随机验证码, 试了下这样可以 srand(time()); code = [NSString stringWithFormat: - )) + ];
- Redis的使用模式之计数器模式实例
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/123.html?1455853785 Redis 是目前 NoSQL 领域 ...
- Atitit.加密算法ati Aes的框架设计v2.2
Atitit.加密算法ati Aes的框架设计v2.2 版本进化1 V2.2 add def decode key api1 v1版本1 Aes的历史2 Atitit.加密算法 des aes ...
- Atitit 通过调用gui接口杀掉360杀毒 360卫士 qq保镖等难以结束的进程(javac# php )
Atitit 通过调用gui接口杀掉360杀毒 360卫士 qq保镖等难以结束的进程(javac# php ) 1.1. 这些流氓软件使用操作系统os提供的普通api根本就杀不掉啊1 1.2. 使用 ...
- java webservice 总结(学会读别人的webservice并且通过代理模式访问)
公司做的系统之间的交互用到了webservice做交互,现在对webservice做一个总结. 1.配置已有的webservice webservice主要包括 xml/json:作为传输数据的格式 ...
- angularJS自定义那些事
angularJS在数据处理方面很优秀. 使用angularJ给我感觉就像在写模板,然后对模板填入内容,只是这些内容不在是 在html页面编写,而是以数据的方式添加进去,这个也大大提高了编写的效率. ...
- Android入门(五)UI-单位与尺寸、ListView
原文链接:http://www.orlion.ga/453/ 一.单位与尺寸 布局文件中一共有以下单位供选择:px,pt,dp,sp px:是像素,屏幕中可见的最小元素单位. pt:是磅,1磅等于1/ ...
- 【原创】.NET读写Excel工具Spire.Xls使用(4)对数据操作与控制
本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html .NET读写Excel工具Spire.Xls使用文章 ...
- js返回上一页并刷新的多种实现方法
<a href="javascript:history.go(-1)">返回上一页</a> <a href="javascript:loca ...
- QQ JS_SDk相关功能接口
一.实现QQ登录功能 <!DOCTYPE html><html lang="zh-cn"> <head> <meta htt ...