PHP+mysql+Highcharts生成饼状图


Posted in Javascript onMay 04, 2015

PHP+mysql+Highcharts生成饼状图

Mysql

首先我们建一张·chart_pie·表作为统计数据。

-- 
-- 表的结构 `chart_pie` 
-- 
 
CREATE TABLE IF NOT EXISTS `chart_pie` ( 
 `id` int(11) NOT NULL AUTO_INCREMENT, 
 `title` varchar(30) NOT NULL, 
 `pv` int(10) NOT NULL, 
 PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ; 
 
-- 
-- 转存表中的数据 `chart_pie` 
-- 
 
INSERT INTO `chart_pie` (`id`, `title`, `pv`) VALUES 
(1, '百度', 1239), 
(2, 'google', 998), 
(3, '搜搜', 342), 
(4, '必应', 421), 
(5, '搜狗', 259), 
(6, '其他', 83);

PHP

在pie.php我们要生成数据给前端调用:

$query = mysql_query("select * from chart_pie"); 
while($row = mysql_fetch_array($query)){ 
 $arr[] = array( 
  $row['title'],intval($row['pv']) 
 ); 
} 
$data = json_encode($arr);
jQuery
$(function() { 
 $('#highcharts').highcharts({ 
  chart: { 
   renderTo: 'chart_pie', 
   //饼状图关联html元素id值 
   defaultSeriesType: 'pie', 
   //默认图表类型为饼状图 
   plotBackgroundColor: '#ffc', 
   //设置图表区背景色 
   plotShadow: true //设置阴影 
  }, 
  title: { 
   text: '搜索引擎统计分析' //图表标题 
  }, 
  credits: { 
   text: '3water.com' 
  }, 
  tooltip: { 
   formatter: function() { //鼠标滑向图像提示框的格式化提示信息 
    return '<b>' + this.point.name + '</b>: ' + twoDecimal(this.percentage) + ' %'; 
   } 
  }, 
  plotOptions: { 
   pie: { 
    allowPointSelect: true, 
    //允许选中,点击选中的扇形区可以分离出来显示 
    cursor: 'pointer', 
    //当鼠标指向扇形区时变为手型(可点击) 
    //showInLegend: true, //如果要显示图例,可将该项设置为true 
    dataLabels: { 
     enabled: true, 
     //设置数据标签可见,即显示每个扇形区对应的数据 
     color: '#000000', 
     //数据显示颜色 
     connectorColor: '#999', 
     //设置数据域扇形区的连接线的颜色 
     style: { 
      fontSize: '12px' //数据显示的大小 
     }, 
     formatter: function() { //格式化数据 
      return '<b>' + this.point.name + '</b>: ' + twoDecimal(this.percentage) + ' %'; 
      //return '<b>' + this.point.name + '</b>: ' + this.y ; 
     } 
    } 
   } 
  }, 
  series: [{ //数据列 
   name: 'search engine', 
   data: data //核心数据列来源于php读取的数据并解析成JSON 
  }] 
 }); 
});

此外,格式化数据市,如果要显示百分比,可使用this.percentage,Highcharts会自动将整数转换为百分数,如果要显示数据量,直接使用this.y。
百分比代码如下:

formatter: function() { //格式化数据 
 return '<b>' + this.point.name + '</b>: ' + twoDecimal(this.percentage) + ' %'; 
}

实际数据是这样的:

formatter: function() { //格式化数据 
 return '<b>' + this.point.name + '</b>: ' + this.y ; 
}

最后我们要保留两位小数,代码贴下:

function twoDecimal(x) { //保留2位小数 
 var f_x = parseFloat(x); 
 if (isNaN(f_x)) { 
  alert('错误的参数'); 
  return false; 
 } 
 var f_x = Math.round(x * 100) / 100; 
 var s_x = f_x.toString(); 
 var pos_decimal = s_x.indexOf('.'); 
 if (pos_decimal < 0) { 
  pos_decimal = s_x.length; 
  s_x += '.'; 
 } 
 while (s_x.length <= pos_decimal + 2) { 
  s_x += '0'; 
 } 
 return s_x; 
}

柱状图、饼状图、曲线图等都是一样的。

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
javascript removeChild 使用注意事项
Apr 11 Javascript
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
Aug 02 Javascript
JavaScript中exec函数用法实例分析
Jun 08 Javascript
JavaScript Math 对象常用方法总结
Apr 28 Javascript
js获取指定字符前/后的字符串简单实例
Oct 27 Javascript
Vue响应式原理详解
Apr 18 Javascript
微信小程序数字滚动插件使用详解
Feb 02 Javascript
AngularJS实现与后台服务器进行交互的示例讲解
Aug 13 Javascript
使用layui 的layedit定义自己的toolbar方法
Sep 18 Javascript
JavaScript对象字面量和构造函数原理与用法详解
Apr 18 Javascript
Vue中computed及watch区别实例解析
Aug 01 Javascript
JavaScript实现简单图片切换
Apr 29 Javascript
jQuery实现仿Google首页拖动效果的方法
May 04 #Javascript
js检测判断日期大于多少天的方法
May 04 #Javascript
jQuery实现表格展开与折叠的方法
May 04 #Javascript
JS数字抽奖游戏实现方法
May 04 #Javascript
JS实现跟随鼠标立体翻转图片的方法
May 04 #Javascript
js实现使用鼠标拖拽切换图片的方法
May 04 #Javascript
js实现每日自动换一张图片的方法
May 04 #Javascript
You might like
PHP中file_get_contents高?用法实例
2014/09/24 PHP
php恢复数组的key为数字序列的方法
2015/04/28 PHP
微信支付开发维权通知实例
2016/07/12 PHP
PHP实现路由映射到指定控制器
2016/08/13 PHP
php利用gd库为图片添加水印
2016/11/09 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
使用 laravel sms 构建短信验证码发送校验功能
2017/11/06 PHP
IE6中使用position导致页面变形的解决方案(js代码)
2011/01/09 Javascript
两个listbox实现选项的添加删除和搜索
2013/03/01 Javascript
javascript打印大全(打印页面设置/打印预览代码)
2013/03/29 Javascript
巧用js提交表单轻松解决一个页面有多个提交按钮
2013/11/17 Javascript
js给页面加style无效果的解决方法
2014/01/20 Javascript
js实现浮动在网页右侧的简洁QQ在线客服代码
2015/09/04 Javascript
Jquery中request和request.form和request.querystring的区别
2015/11/26 Javascript
基于Layer+jQuery的自定义弹框
2020/05/26 Javascript
bootstrap vue.js实现tab效果
2017/02/07 Javascript
jQuery Chosen通用初始化
2017/03/07 Javascript
关于Vue项目跨平台运行问题的解决方法
2018/09/18 Javascript
详解mpvue scroll-view自动回弹bug解决方案
2018/10/01 Javascript
你应该了解的JavaScript Array.map()五种用途小结
2018/11/14 Javascript
Python装饰器入门学习教程(九步学习)
2016/01/28 Python
儿童编程python入门
2018/05/08 Python
Django中间件基础用法详解
2019/07/18 Python
如何基于windows实现python定时爬虫
2020/05/01 Python
python3读取autocad图形文件.py实例
2020/06/05 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
2021/01/29 Python
加拿大约会网站:EliteSingles.ca
2018/01/12 全球购物
美国孕妇装购物网站:Motherhood Maternity
2019/09/22 全球购物
大专毕业生简历的自我评价
2013/10/20 职场文书
幼儿园教师教育感言
2014/02/28 职场文书
经典导游欢迎词
2015/01/26 职场文书
《巨人的花园》教学反思
2016/02/19 职场文书
房屋转让协议书(标准范本)
2016/03/21 职场文书
人生一定要学会的三样东西:放下、忘记、珍惜
2019/08/21 职场文书
总结Python使用过程中的bug
2021/06/18 Python
关于PostgreSQL JSONB的匹配和交集问题
2021/09/14 PostgreSQL