php绘制饼图,php怎么绘制饼图?

3f2c1e85da4397be5a8ecffa922f5ecb.png

php怎么绘制饼图?

在php中,可以使用GD绘制饼图。

GD库是php处理图形的扩展库,GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片,也可以给图片加水印。

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();

效果图如下:

f9d322bce299fabba34e62f3c1f5ddd6.png

GD库的主要用途

在网站上GD库通常用来生成缩略图,或者用来对图片加水印,或者用来生成汉字验证码,或者对网站数据生成报表等。在PHP处理图像,可使用GD库,而GD库开始时是支持GIF的,但由于GIF使用了有版权争议的LZW算法,会引起法律问题,于是从 GD 库 1.6 版起所有的 GIF 支持都移除了,但是又在 GD 库 2.0.28 版起又加了回来。如果使用二者之间版本的 GD 库时 GIF 相关函数不可用。

更多相关知识,请访问 PHP中文网!!

相关标签:php 饼图

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305158.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

silklabo哪个公众号有资源_微小说免费渣渣团资源公众号看大全集

“免费小说全本”公众号。小说免费阅读吧|免费小说在线阅读网|免费小说资源|小说传送站&#xff5c;小说免费公众号推荐&#xff5c;免费小说全集书城推荐&#xff5c;免费小说公众号渣渣团&#xff5c;小说免费阅读叶辰萧初然|霸道总裁&#xff5c;先生是谁等全免费&#xff5…

Oracle 10R2 研究--db_file_multiblock_read_count对成本的影响

当研究oracle的查找方式中发现&#xff0c;在全表扫描和索引扫描时&#xff0c;会用到db_file_multiblock_read_count来一次读取多个IO。也看了一些关于db_file_multiblock_read_count的文章&#xff0c;为加深自己的理解&#xff0c;特做个试验研究。 以下是reference对它的解…

python视频实战_reboot第五期Python实战班视频_IT教程网

资源名称&#xff1a;reboot第五期Python实战班视频教程内容&#xff1a;第一章内容Hello Python上手简单脚本游戏 图形 WEB 你能想到的方方面面PYTHON都可以实现github上python的项目也足够多运行速度不是瓶颈课程实战目标python的基础,掌握基本的编程思想,具体的任务ACCESS_L…

大数据分析苏轼,你没看错,这些都是小学生完成的

适逢苏轼先生诞辰980周年&#xff0c;清华附小开展了一系列致敬苏轼的活动。同学们利用假期时间共完成课题研究报告23份&#xff1a;《大数据帮你进一步认识苏轼》、《苏轼的朋友圈》、《苏轼的旅游品牌价值分析》、《苏轼vs李白》等。是的&#xff0c;你没看错&#xff0c;这些…

深度解读.NET 5授权中间件的执行策略

前文提要2021.1月份我写了一个《这难道不是.NET5 的bug? 在线求锤&#xff1f;》&#xff0c;讲述了我在实现[全局授权访问特例匿名访问] 遇到的技术困惑: [特例匿名访问&#xff0c;怎么走了认证流程&#xff1f;]。博客园上某大佬的看法&#xff1a;大概的意思是说 &…

php myadmin怎么用,关于apachemysqlphpmyadmin的安装与配置

版本&#xff1a;apache_2.2.6-win32-x86-no_sslmysql-essential-5.0.45-win32php-5.2.5-Win32phpMyAdmin-2.11.3-all-languages版本不一样&#xff0c;配置多少会有些差异&#xff0c;但不会很大&#xff0c;大同小异罢了&#xff0c;但尽量还是要从官方网站上下载&#xff0c…

噪声与振动控制工程手册_仨亿技术丨工程机械噪声与控制分析

随着我国经济的发展&#xff0c;各种工程规模不断扩大、数量不断增多&#xff0c;这些工程在造福于人们并促进我国综合国力提高的同时&#xff0c;也在一定程度上带来一些工程机械噪声的问题。工程机械噪声的存在&#xff0c;不仅给工程机械的使用寿命带来不利影响&#xff0c;…

钱德沛教授:云计算和网格计算差别何在?

2008年10月16日&#xff0c;中国电子学会专家论坛——云计算研讨会在北京召开。国家“十五”863计划“计算机软硬件技术” 主题专家组副组长、北京航空航天大学钱德沛教授在会上介绍了自己关于云计算的看法&#xff0c;并分析了云计算与网格计算、Web计算等的差异&#xff0c;并…

EFCore查缺补漏(一):依赖注入

前段时间&#xff0c;在群里潜水的时候&#xff0c;看见有个群友的报错日志是这样的&#xff1a;An unhandled exception was thrown by the application. System.OutOfMemoryException: Exception of type System.OutOfMemoryException was thrown.at System.Threading.Thread…

sql倒序排列取第一条_从零学会SQL·三——汇总分析

一、常用汇总函数的练习score表问题&#xff1a;查询课程编号为“0002”的总成绩查询选了课程的学生人数查询学号为“0001”的学生的最高分、最低分和平均分解答SQL语句如下&#xff1a;-- 查询课程编号为“0002”的总成绩 SELECT 学号,SUM(成绩)FROM score WHERE 课程号0002;-…

2017 软件开发薪酬调查:Go 和 Scala 是最赚钱的语言

英文&#xff1a;codeburst&#xff0c;编译&#xff1a;oschina www.oschina.net/news/87499/go-scala-are-the-most-lucrative-languages 每年 O’Reilly 都会发布其年度开发者的调查结果。这项调查涵盖了来自世界 110 个国家的近 7000 名程序员。这里摘几个亮点&#xff1a;…

bootstrap grid php,bootstrap grid用法

bootstrap grid的用法&#xff1a;首先使用container来包裹div&#xff1b;然后在div里面设置行&#xff1b;接着设置列能够快速对这个框架进行搭建&#xff1b;最后通过拖拽浏览器来改变宽窄即可。本文操作环境&#xff1a;Windows7系统、bootstrap3、Dell G3电脑。bootstrap的…

js map对象遍历_前端测试题:有关于js中跨域请求的说法,错误的是?

考核内容:javascript 跨域的使用题发散度: ★试题难度: ★解题思路:什么是跨域&#xff1f;跨域是指一个域下的文档或脚本试图去请求另一个域下的资源&#xff0c;这里跨域是广义的。什么是同源策略&#xff1f;同源策略/SOP(Same origin policy)是一种约定&#xff0c;由Netsc…

[转]快速清除SQL Server日志的两种方法

日志文件满而造成SQL数据库无法写入文件时&#xff0c;可用两种方法&#xff1a; 第一种方法&#xff1a;清空日志。 1.打开查询分析器&#xff0c;输入命令 以下是引用片段&#xff1a; DUMP TRANSACTION 数据库名 WITH NO_LOG 2.再打开企业管理器--右键你要压缩的数据库--所…

管理信息系统案例分析_「案例」MES系统助力华联电子仓库工作人员效率提高30%...

一、企业简介厦门华联电子股份有限公司成立于1984年&#xff0c;注册资金12929万元&#xff0c;现有自主厂房8万平方米&#xff0c;全自动化生产线40多条&#xff0c;员工2400余人&#xff0c;是国内最具规模的智能控制器、光电子器件的生产厂家之一。企业集研发、生产、销售和…

php拖拽原理,JS拖拽原理

实例html>拖拽#ball {width: 50px;height: 50px;background-color: lightpink;border-radius: 50%;box-shadow: 2px 2px 1px #888;position: absolute;}// onmousedown: 选择, onmouseover: 移动, onmouseup:放下//找到小球的位置:// 当前鼠标到小球边沿的距离相对是不变的,…

数学系学生的漫画,治愈了整个朋友圈

如何在无趣的世界里&#xff0c;做一个有趣的人&#xff1f; 有时候&#xff0c;无厘头、无意义、有趣性&#xff0c;胜过一切宏大叙事。 “此人脑洞开得很大&#xff0c;且深不见底。”这是网友对tango的描述。 对于画家tango的作品&#xff0c;大家并不陌生&#xff0c;最近他…

孟岩谈Erlang:并行计算和云计算

孟岩谈Erlang&#xff1a;并行计算和云计算 ——写在《Erlang程序设计》出版之际 Erlang算不上是一种“大众流行”的程序设计语言&#xff0c;而且即使是Erlang的支持者&#xff0c;大多数也对于Erlang成为“主流语言”并不持乐观态度。然而&#xff0c;自从2006年以来&#xf…

php获取域名方法,PHP实现获取域名的方法小结

文章主要介绍了PHP实现获取域名的方法,实例总结了常见的获取域名的方法,非常具有实用价值,需要的朋友可以参考下。方法一(用 系统变量)复制代码 代码如下://缺点不使用传递过来的地址和不支持系统变量的主机echo $_SERVER[HTTP_HOST];方法二(用自带函数)复制代码 代码如下:$url…

python 日期格式校验_python – 如何验证时间格式?

这就是我到目前为止,它可能完全是垃圾.我想要做的是验证caminput1,以便格式为HH&#xff1a;MM&#xff1a;SS.哈希是从我测试时开始的.def cameraspeedcheck():timeformat ("%H:%M:%S")caminput1 input("At what time did sensor 1 actuate? ")# is ca…