PHP+mysql+Highcharts实现饼状统计图



Mysql
首先我们建一张・chart_pie・表作为统计数据。
  1. -- edit http://www.lai18.com   
  2. -- 表的结构 `chart_pie`   
  3. --   
  4.    
  5. CREATE TABLE IF NOT EXISTS `chart_pie` (   
  6.  `id` int(11) NOT NULL AUTO_INCREMENT,   
  7.  `title` varchar(30) NOT NULL,   
  8.  `pv` int(10) NOT NULL,   
  9.  PRIMARY KEY (`id`)   
  10. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;   
  11.    
  12. --   
  13. -- 转存表中的数据 `chart_pie`   
  14. --   
  15.    
  16. INSERT INTO `chart_pie` (`id`, `title`, `pv`) VALUES   
  17. (1, '百度', 1239),   
  18. (2, 'google', 998),   
  19. (3, '搜搜', 342),   
  20. (4, '必应', 421),   
  21. (5, '搜狗', 259),   
  22. (6, '其他', 83);  


PHP
在pie.php我们要生成数据给前端调用(参考: http://www.lai18.com/content/409203.html):
  1. /* edit http://www.lai18.com 
  2.  * PHP代码 
  3.  */  
  4. $query = mysql_query("select * from chart_pie");   
  5. while($row = mysql_fetch_array($query)){   
  6.  $arr[] = array(   
  7.   $row['title'],intval($row['pv'])   
  8.  );   
  9. }   
  10. $data = json_encode($arr);  
  11. jQuery  
  12. $(function() {   
  13.  $('#highcharts').highcharts({   
  14.   chart: {   
  15.    renderTo: 'chart_pie',   
  16.    //饼状图关联html元素id值   
  17.    defaultSeriesType: 'pie',   
  18.    //默认图表类型为饼状图   
  19.    plotBackgroundColor: '#ffc',   
  20.    //设置图表区背景色   
  21.    plotShadow: true //设置阴影   
  22.   },   
  23.   title: {   
  24.    text: '搜索引擎统计分析' //图表标题   
  25.   },   
  26.   credits: {   
  27.    text: 'jb51.net'   
  28.   },   
  29.   tooltip: {   
  30.    formatter: function() { //鼠标滑向图像提示框的格式化提示信息   
  31.     return '<b>' + this.point.name + '</b>: ' + twoDecimal(this.percentage) + ' %';   
  32.    }   
  33.   },   
  34.   plotOptions: {   
  35.    pie: {   
  36.     allowPointSelect: true,   
  37.     //允许选中,点击选中的扇形区可以分离出来显示   
  38.     cursor: 'pointer',   
  39.     //当鼠标指向扇形区时变为手型(可点击)   
  40.     //showInLegend: true, //如果要显示图例,可将该项设置为true   
  41.     dataLabels: {   
  42.      enabled: true,   
  43.      //设置数据标签可见,即显示每个扇形区对应的数据   
  44.      color: '#000000',   
  45.      //数据显示颜色   
  46.      connectorColor: '#999',   
  47.      //设置数据域扇形区的连接线的颜色   
  48.      style: {   
  49.       fontSize: '12px' //数据显示的大小   
  50.      },   
  51.      formatter: function() { //格式化数据   
  52.       return '<b>' + this.point.name + '</b>: ' + twoDecimal(this.percentage) + ' %';   
  53.       //return '<b>' + this.point.name + '</b>: ' + this.y ;   
  54.      }   
  55.     }   
  56.    }   
  57.   },   
  58.   series: [{ //数据列   
  59.    name: 'search engine',   
  60.    data: data //核心数据列来源于php读取的数据并解析成JSON   
  61.   }]   
  62.  });   
  63. });  


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

百分比代码如下:
  1. formatter: function() { //格式化数据   
  2.  return '<b>' + this.point.name + '</b>: ' + twoDecimal(this.percentage) + ' %';   
  3. }  


实际数据是这样的:
  1. /* edit http://www.lai18.com 
  2.  * JS代码 
  3.  */  
  4. formatter: function() { //格式化数据   
  5.  return '<b>' + this.point.name + '</b>: ' + this.y ;   
  6. }  


最后我们要保留两位小数,代码贴下:
  1. function twoDecimal(x) { //保留2位小数   
  2.  var f_x = parseFloat(x);   
  3.  if (isNaN(f_x)) {   
  4.   alert('错误的参数');   
  5.   return false;   
  6.  }   
  7.  var f_x = Math.round(x * 100) / 100;   
  8.  var s_x = f_x.toString();   
  9.  var pos_decimal = s_x.indexOf('.');   
  10.  if (pos_decimal < 0) {   
  11.   pos_decimal = s_x.length;   
  12.   s_x += '.';   
  13.  }   
  14.  while (s_x.length <= pos_decimal + 2) {   
  15.   s_x += '0';   
  16.  }   
  17.  return s_x;   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了制作PHP+MySQL折线图,您需要使用Highcharts库和jQuery库。您可以按照以下步骤进行操作: 1. 首先,您需要从Highcharts官网下载Highcharts库和jQuery库,并将它们添加到您的项目中。 2. 接下来,您需要从MySQL数据库中检索数据。您可以使用PHP编写代码来连接到MySQL数据库并检索数据。 3. 将检索到的数据存储在一个数组中,并将其传递给JavaScript代码。 4. 使用Highcharts库中的chart()函数创建一个折线图,并将数据传递给该函数。 5. 最后,将折线图呈现在您的网页上。 以下是一个简单的PHP+MySQL折线图的示例代码: ```php <?php //连接到MySQL数据库 $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; $conn = new mysqli($servername, $username, $password, $dbname); //检索数据 $sql = "SELECT * FROM myTable"; $result = $conn->query($sql); //将数据存储在数组中 $data = array(); while($row = $result->fetch_assoc()) { $data[] = $row['value']; } //将数据传递给JavaScript代码 echo "<script> var data = ".json_encode($data)."; </script>"; ?> <!-- 在HTML中创建一个容器来呈现折线图 --> <div id="container"></div> <!-- 引用Highcharts库和jQuery库 --> <script src="jquery-1.8.2.min.js"></script> <script src="highcharts.js"></script> <!-- 创建折线图 --> <script> $(function () { $('#container').highcharts({ title: { text: '折线图', x: -20 //center }, xAxis: { categories: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'] }, yAxis: { title: { text: '数值' }, plotLines: [{ value: 0, width: 1, color: '#808080' }] }, series: [{ name: '数据', data: data }] }); }); </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值