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 ...
随机推荐
- sigar
从http://sourceforge.net/projects/sigar/files/sigar/1.6/hyperic-sigar-1.6.4.zip/download下载sigar, 参照了h ...
- 爱上MVC系列~带扩展名的路由失效问题
回到目录 对MVC中,对URL进行重写变得非常方便,你只要设置相应的路由规则即可完成,但进行MVC3后,发现设置了以下路由,系统具体不认 routes.MapRoute( name: "De ...
- @SuppressWarnings忽略警告
简介:java.lang.SuppressWarnings是J2SE 5.0中标准的Annotation之一.可以标注在类.字段.方法.参数.构造方法,以及局部变量上.作用:告诉编译器忽略指定的警告, ...
- Android 神兵利器—— Adb 常用命令
总结的Android工具类文章: Android 神兵利器-- Adb 常用命令 Android 神兵利器-- Git 常用命令 Adb的全称为Android Debug Bridge,是管理andr ...
- Unity 碰撞检测中碰撞器与触发器的区别
要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器,刚体可以让物体在物理影响下运动.碰撞体是物理组件的一类,它要与刚体一起添加到游戏对象上才能触发碰撞.如果两个刚体相互撞在一起,除非两个对 ...
- 信息加密之消息摘要算法的MAC
MAC是消息摘要算法的第三种实现方式,另外两种方式分别为:MD2\4\5.SHA. MAC的jdk实现:1.默认密钥方式 private static void MAC_JDK(){ try { Ke ...
- Android基于mAppWidget实现手绘地图(十二)–显示当前用户位置
若显示当前用户位置,你需要执行以下步骤: 1.添加ACCESS_COARSE_LOCATION 和ACCESS_FINE_LOCATION权限在AndroidManifest.xml中 2.用mapW ...
- Android自定义Dialog及其布局
实际项目开发中默认的Dialog样式无法满足需求,需要自定义Dialog及其布局,并响应布局中控件的事件. 上效果图: 自定义Dialog,LogoutDialog: 要将自定义布局传入构造函数中, ...
- IP,路由,交换基础培训记录
IP 掩码 子网划分 vlan划分(有助于减少广播压力) vlan之间互通通过交换机打通. 路由,静态路由,动态路由(学习到的),路由表,下一跳,网络位长的优先级高. 交换机,hub集线器. hub ...
- 10个优秀的 HTML5 & CSS3 下拉菜单制作教程
下拉菜单是一个很常见的效果,在网站设计中被广泛使用.通过使用下拉菜单,设计者不仅可以在网站设计中营造出色的视觉吸引力,但也可以为网站提供了一个有效的导航方案.使用 HTML5 和 CSS3 可以更容易 ...