生成饼状图,折线图,条形图通用的php类,这里使用的是百度 Echart。

Echart 官方网站  http://echarts.baidu.com/

  1. <?php
  2. class Echarts
  3. {
  4.  
  5. /**
  6. * 返回渲染图表Js代码
  7. * @param $id dom元素id
  8. * @param array $data 图表数据Data
  9. * @param $type 图表类型 饼图: pie 条形图:bar 条形图: line
  10. * @param string $mainTitle 主要标题
  11. * @param string $subTitle 副标题
  12. * @param string $yUnit y轴单位
  13. *@param string $color 颜色 $color="['orange','green','pink']";
  14. * @return string
  15. */
  16. public static function getEcharts($id, array $data, $type, $mainTitle = '', $subTitle = '', $yUnit = '',$color="")
  17. {
  18. $xaxis = "";
  19. $series = "";
  20. if (empty($data)) {
  21. $data = array(
  22. 'legend' => array(
  23. 'data' => array('-')
  24. ),
  25. 'xaxis' => array(
  26. 'type' => 'category',
  27. 'boundaryGap' => 'false',
  28. 'data' => array('')
  29. ),
  30. 'series' => array(
  31. array(
  32. 'name' => '-',
  33. 'type' => 'line',
  34. 'itemStyle' => "{normal: {areaStyle: {type: 'default'}}}",
  35. 'data' => array()
  36. ),
  37. )
  38. );
  39. }
  40. foreach ($data as $key => $value) {
  41. switch ($key) {
  42. case 'legend':
  43. $legend = '[';
  44. foreach ($value as $k => $v) {
  45. // data:['直接访问','邮件营销','联盟广告','视频广告','搜索引擎']
  46. $legend = $legend . json_encode($v, JSON_UNESCAPED_UNICODE) . ',';
  47.  
  48. }
  49. $legend = $legend . ']';
  50. break;
  51. case 'xaxis':
  52. foreach ($value as $k => $v) {
  53. switch ($k) {
  54. case 'type':
  55. $xaxis[] = $k . ":'" . $v . "'";
  56. break;
  57. case 'boundaryGap':
  58. $xaxis[] = $k . ':' . $v;
  59. break;
  60. case 'data':
  61. $xaxis[] = $k . ':' . json_encode($v, JSON_UNESCAPED_UNICODE);
  62. break;
  63. }
  64. }
  65. $xaxis = '{' . implode(', ', $xaxis) . '}';
  66. break;
  67. case 'series':
  68. foreach ($value as $list) {
  69. $tmp = array();
  70. foreach ($list as $k => $v) {
  71. switch ($k) {
  72. case 'name':
  73. case 'radius':
  74. case 'type':
  75. $tmp[] = $k . ":'" . $v . "'";
  76. break;
  77. case 'center':
  78. $tmp[] = $k . ":".$v;
  79. break;
  80. case 'itemStyle':
  81. $tmp[] = $k . ':' . $v;
  82. break;
  83. case 'data':
  84. $tmp[] = $k . ':' . json_encode($v, JSON_UNESCAPED_UNICODE);
  85. }
  86. }
  87. $series[] = '{' . implode(', ', $tmp) . '}';
  88. }
  89. $series = implode(', ', $series);
  90. break;
  91. }
  92. }
  93. if ($type == 'pie') {
  94. $xyAxis = '';
  95. $tooltip="trigger: 'item',formatter: '{a} <br/>{b}:{c} ({d}%)'";
  96. } else {
  97. $xyAxis = 'xAxis :[' . $xaxis . '],';
  98. $xyAxis = $xyAxis . "yAxis : [{type : 'value', axisLabel : {formatter: '{value}$yUnit'}}],";
  99. $tooltip="trigger: 'axis'";
  100. }
  101. if($color!="")
  102. {
  103. $color='color:'.$color.',';
  104. }
  105.  
  106. $script = <<<EOT
  107. // 路径配置
  108. require.config({
  109. paths: {
  110. echarts: 'http://echarts.baidu.com/build/dist'
  111. }
  112. });
  113. // 按需加载所需图表
  114. require(
  115. [
  116. 'echarts',
  117. 'echarts/chart/bar', //按需加载条形图
  118. 'echarts/chart/line', //按需加载折线图
  119. 'echarts/chart/funnel',
  120. 'echarts/chart/pie', //按需要加载饼图
  121. 'echarts/chart/gauge',
  122. 'echarts/chart/map',
  123. ],
  124. function(ec) {
  125. var myChart = ec.init(document.getElementById('$id'));
  126. var option = {
  127. $color
  128. title : {
  129. text:'$mainTitle',
  130. subtext: '$subTitle',
  131. x:'center'
  132. },
  133. tooltip : {
  134. $tooltip
  135. },
  136. legend: {
  137. orient: 'vertical',
  138. x: 'left',
  139. data: $legend
  140. },
  141. toolbox: {
  142. show : false,
  143. feature : {
  144. mark : false,
  145. dataView: { show: true, readOnly: false },
  146. magicType:['line', 'bar','pie','gauge'],
  147. restore : true
  148. }
  149. },
  150. calculable : true,
  151. $xyAxis
  152. series : [$series]
  153. };
  154. myChart.setOption(option);
  155. }
  156. );
  157. EOT;
  158. return $script;
  159. }
  160. }

如何使用,php后台调用方法

  1. // 饼形图模拟数据
  2. $optionPie = array(
  3. "legend" => array("未参加活动", "参与活动未回答问卷", "参与活动并回答问卷"),
  4. "series" => array(
  5. array(
  6. "name" =>"会员活动详情",
  7. "type" =>"pie",
  8. "radius"=>"50%",
  9. "center"=>"['50%', '50%']",
  10. "data" => $data, //这是一个二维数组
  11. "itemStyle"=>"{normal:{label:{show:true,formatter:'{b}:{c}人 ({d}%)'}},labelLine :{label:{show:true}}}"),
  12. ),
  13. );
  14. $ec = new Echarts();
  15. $result = $ec->getEcharts('pieArea', $optionPie, 'pie', '杜比广州上海活动2情况统计图'); // 显示在指定的dom节点上
  16.  
  17.     //返回的是js脚本
  18. return $result;

就这样调用就可以在前台显示统计图了。

对了在前台页面还要添加echarts引用,已经Jquery引用

<script src="http://echarts.baidu.com/build/dist/echarts.js"></script>

php 生成饼状图,折线图,条形图 通用类的更多相关文章

  1. php 生成饼状图,折线图,条形图 通用类 2

    生成饼状图,折线图,条形图通用的php类,这里使用的是国外的 HighCharts,前台页面别忘了调用HighCahrt  js HighCharts中文网站  http://www.hcharts. ...

  2. JFreeChart框架中生成饼状图上怎样显示数据 [问题点数:40分,结帖人GreenLawn]

    我用JFreeChart框架生成饼状图,但想把数据信息在饼图上显示,是在饼图内部(即圆内)显示!怎样实现啊??  去掉lablepieplot.setLabelGenerator(null);去掉线p ...

  3. 【Excel】绘图案例_常见复合图:簇状图+堆积图+折线图

    前言 最近有朋友让我帮忙用excel画图,老实说我很讨厌用excel画图,点来点去,复杂一些还不能复用,非常繁琐.当然,入门也很简单.需求时不同城市.不同产品的2016和2017销量及环比数据,这应该 ...

  4. Python的可视化包 – Matplotlib 2D图表(点图和线图,.柱状或饼状类型的图),3D图表(曲面图,散点图和柱状图)

    Python的可视化包 – Matplotlib Matplotlib是Python中最常用的可视化工具之一,可以非常方便地创建海量类型地2D图表和一些基本的3D图表.Matplotlib最早是为了可 ...

  5. highcharts 动态生成x轴和折线图

    highchart 动态生成x轴和折线图 <!DOCTYPE HTML> <html> <head> <meta charset="utf-8&qu ...

  6. Echarts生成饼状图、条形图以及线形图 JS封装

    1.在我们开发程序中,经常会用到生成一些报表,比方说饼状图,条形图,折线图等.不多说了,直接上封装好的代码,如下Echarts.js所示 以下代码是封装在Echarts.js文件中 /** * Cre ...

  7. PHP实现动态生成饼状图、柱状图和折线图(转载)

    PHP在图像操作方面的表现非常出色,我们只需借助可以免费得到的GD库便可以轻松实现图.表勾画.下面将分别介绍PHP实现的饼状图.折线图和柱状图以 及他们的使用方法,这几段代码的特点就是不需要再把它们复 ...

  8. PHP实现动态生成饼状图 (转载)

    <?php //变量定义,画椭圆弧时的角度大小 define("ANGLELENGTH", 10); /** * 绘制图片 * @param $title 3D图的标题 * ...

  9. 使用WinForm Chart控件 制作饼装,柱状,折线图

    http://blog.csdn.net/dream2050csdn/article/details/53510340 chart控件的属性很多,主要用到Chart控件图表区域的属性有五个属性 1.A ...

随机推荐

  1. 阶乘问题(大数阶乘)简单 n! (一个大数与一个小数相乘的算法 、一个大数与一个小数的除法算法 *【模板】 )

    sdut oj 简单n! Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 给定一个数n(0 <= n <= 150), ...

  2. 如何使用BMap.Point传递变量、存储数据?

    在开发中使用到了百度地图进行开发,用于展示企业位置.由于数据量庞大,如果使用marker,将会造成界面卡顿,处理慢的问题. 在查看百度地图API示例是发现了海量点这个东西,还别说对于大数量的点加载起来 ...

  3. I.MX6 Android 5.1.1 下载、编译

    /************************************************************************* * I.MX6 Android 5.1.1 下载. ...

  4. 相对定位relative与绝对定位absolute

    relative:相对定位,并没有脱离原来文档流,依然在原来的位置上,可以通过设置left,top,来设置自己的偏移量,但是它依然占据自己原来的位置,偏移的位置会遮盖其他的元素 absolute:绝对 ...

  5. 使用mysqlfrm恢复frm表结构,获得建表语句

    1.mysqlfrm 是一个恢复性质的工具,用来读取.frm文件并从该文件中找到表定义数据生成CREATE语句. 下载链接:https://downloads.mysql.com/archives/u ...

  6. centos7安装redis3.2.12

    1.准备安装包,放在/usr/local/src/ 2.解压安装包,解压到/usr/local/ tar zxf redis-3.2.12.tar.gz -C /usr/local/ 3.cd /us ...

  7. E20180424-hm

    thumb n. 拇指; (手套的) 拇指部份; trigger  vt. 引发,触发; 扣…的扳机; 发射或使爆炸(武器或爆炸性弹药);      n. (枪) 扳机; 起动装置,扳柄; 引发其他事 ...

  8. 跳马~~~HDU1372

    基础BFS,水过就好~手写队列优化~~ #include <iostream> #include <stdio.h> #include <string.h> #in ...

  9. jetty的web部署

    jetty版本:jetty-distribution-9.4.8.v20171121,jdk1.8 1.下载jetty 2.cd demo-base 3.java -jar ../start.jar ...

  10. pycharm 断点调试

    转自; https://blog.csdn.net/chenggong2dm/article/details/9368641 PyCharm 作为IDE,断点调试是必须有的功能.否则,我们还真不如用纯 ...