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 ...
随机推荐
- MVVM架构~knockoutjs系列之扩展ajax验证~验证数据是否存在
返回目录 在大部分网站里,用户名都是唯一的,即当用户注册时,如果用户输入的名字不合法,我们需要提示用户,让用户再起个新名字,而这种复杂的验证一般是通过JS来实现的,如果把它集成到ko里,那就完美了.有 ...
- excel表格中如何将内容粘贴到筛选后的可见单元格[转]
默认情况下,筛选后excel表格进行复制粘贴,会贴到隐藏的表格. 可以添加两个辅助列来完成操作:1.在筛选前在表格右边添加"辅助1"列,在第二行输入1,按Ctrl+鼠标左键往下拉到 ...
- Atitit 图像处理之仿油画效果 Oilpaint油画滤镜 水彩画 漫画滤镜 v2
Atitit 图像处理之仿油画效果 Oilpaint油画滤镜 水彩画 漫画滤镜 v2 1.1. 具体源码参考1 2. ,油画 水彩画具有几个比较明显的特点如下:1 2.1. 明暗层次(灰度)较少 也 ...
- JS 脚本最后加载
有些脚本执行,为了不影响页面其他脚本执行,需要放在最后 <script type="text/javascript"> function addLoadEvent(fu ...
- 《鸟哥的linux私房菜》 - linux命令温故而知新
在公司的某角落里,看到了<鸟哥的linux私房菜>,顿时想看看是什么鬼. 其他时候还要自己去买才有,现在正好,比图书馆方便.看完了,写点啥! 编辑器很重要,一个vim就主要是我的使用方向: ...
- js 字符串的操作
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 每天一个linux命令(12):more命令
more命令,功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上. more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会 ...
- css多行文本省略号问题
已知,单行文本溢出内容用省略号代替,css代码如下: text-overflow: ellipsis; 溢出部分用...代替 white-space: nowrap; //强制在一行显示 overfl ...
- Sublime快速上手
在当前的互联网时代,任何程序语言和相关技术都只是实现互联网应用的一种手段,这也就造成了大量的互联网工程师长期与不同的语言.技术.系统环境.IDE等打交道.因此一个相对统一方便的IDE对于程序员来说显得 ...
- Open Cascade Data Exchange STL
Open Cascade Data Exchange STL eryar@163.com 摘要Abstract:介绍了三维数据交换格式STL的组成,以及Open Cascade中对STL的读写.并将O ...