***百度统计图表Echarts的php实现类,支持柱形图、线形图、饼形图

/**
 * 百度数据统计图表echart的PHP实现类
 *
 * 原作者:
 * @author:	chenliujin	<[email protected]>
 * @since 	2013-12-12
 *
 * 修改者:
 * @author:	iamlintao	<http://www.iamlintao.com>
 * @since:	2014-06-25
 * @version:
 * @revision:
 *
 * 			修改后支持 柱形图(bar)、线形图(line)、饼形图(pie)
 *
 * @example:
 *
 * 		HTML代码部分:
 * 			<script src="js/esl.js"></script>
 * 			<body>
				<!-- 线形图、柱形图显示 -->
				<div id="chartArea" style="height:300px;border:1px solid #ccc;padding:10px;"></div>
				<!-- 饼形图显示 -->
				<div id="pieArea" style="height:300px;border:1px solid #ccc;padding:10px;"></div>
			</body>

		PHP代码部分:

		//  柱形图、线形图模拟数据
		$option = array(
			"legend"=>array("邮件营销","联盟广告","视频广告","直接访问","搜索引擎"),
			"xaxis"=>array("type"=>"category","boundaryGap"=>"true","data"=>array("周一","周二","周三","周四","周五","周六","周日")),
			"series"=>array(
						array("name"=>"邮件营销","type"=>"bar","stack"=>"总量","data"=>array("120","132","101","134","90","230","210")),
						array("name"=>"联盟广告","type"=>"bar","stack"=>"总量","data"=>array("220","182","191","234","290","330","310")),
						array("name"=>"视频广告","type"=>"bar","stack"=>"总量","data"=>array("150","232","201","154","190","330","410")),
						array("name"=>"直接访问","type"=>"bar","stack"=>"总量","data"=>array("320","332","301","334","390","330","320")),
						array("name"=>"搜索引擎","type"=>"bar","stack"=>"总量","data"=>array("820","932","901","934","1290","1330","1320")),
					),
			);

		$ec = new Echarts();
		echo $ec->show(‘chartArea‘, $option);	// 显示在指定的dom节点上

		// 饼形图模拟数据
		$optionPie = array(
				"legend"=>array("邮件营销","联盟广告","视频广告","直接访问","搜索引擎"),
				"series"=>array(
						array("name"=>"邮件营销","type"=>"pie","stack"=>"总量",
								"data"=>array(
										array("value"=>"335","name"=>"直接访问"),
										array("value"=>"310","name"=>"邮件营销"),
										array("value"=>"234","name"=>"联盟广告"),
										array("value"=>"135","name"=>"视频广告"),
										array("value"=>"1548","name"=>"搜索引擎"),
								),
						),
				),
		);

		$ec = new Echarts();
		echo $ec->show(‘pieArea‘, $optionPie);	// 显示在指定的dom节点上
 */

class Echarts{

	 public static function show($id, array $data){

 		$xaxis = "";
 		$series = "";

		if (empty($data)) {
			$data = array(
                ‘legend‘ => array(
                    ‘data‘ => array(‘-‘)
                ),
                ‘xaxis‘ => array(
                    ‘type‘ => ‘category‘,
                    ‘boundaryGap‘ => ‘false‘,
                    ‘data‘ => array(‘‘)
                ),
                ‘series‘ => array(
                    array(
                        ‘name‘ => ‘-‘,
                        ‘type‘ => ‘line‘,
                        ‘itemStyle‘ => "{normal: {areaStyle: {type: ‘default‘}}}",
                        ‘data‘ => array()
                    ),
                )
            );
        }

		foreach ($data as $key => $value) {
			switch ($key) {
				case ‘legend‘:
					foreach ($value as $k => $v) {
						switch ($k) {
							case ‘data‘:
								$legend = $k . ‘:‘ . json_encode($v);
								break;
						}
					}
					break;

				case ‘xaxis‘:
					foreach ($value as $k => $v) {
						switch ($k) {
							case ‘type‘:
								$xaxis[] = $k . ":‘" . $v . "‘";
								break;
							case ‘boundaryGap‘:
								$xaxis[] = $k . ‘:‘ . $v;
								break;
							case ‘data‘:
								$xaxis[] = $k . ‘:‘ . json_encode($v);
								break;
						}
					}
					$xaxis = ‘{‘ . implode(‘, ‘, $xaxis) . ‘}‘;
					break;

				case ‘series‘:
					foreach ($value as $list) {
						$tmp = array();
						foreach ($list as $k => $v) {
							switch ($k) {
								case ‘name‘:
								case ‘type‘:
									$tmp[] = $k . ":‘" . $v . "‘";
									break;
								case ‘itemStyle‘:
									$tmp[] = $k . ‘:‘ . $v;
									break;
								case ‘data‘:
									$tmp[] = $k . ‘:‘ . json_encode($v);
							}
						}
						$series[] = ‘{‘ . implode(‘, ‘, $tmp) . ‘}‘;
					}
					$series = implode(‘, ‘, $series);
					break;
			}
		}

		$script = <<<eof
            <script type="text/javascript">
            // Step:3 conifg ECharts‘s path, link to echarts.js from current page.
            // Step:3 为模块加载器配置echarts的路径,从当前页面链接到echarts.js,定义所需图表路径

			// 把所需图表指向单文件
            require.config({
                paths:{
                    echarts:‘./js/echarts‘,
                    ‘echarts/chart/bar‘ : ‘./js/echarts‘,
                    ‘echarts/chart/line‘: ‘./js/echarts‘,
					‘echarts/chart/pie‘: ‘./js/echarts‘
                }
            });

            // Step:4 require echarts and use it in the callback.
            // Step:4 动态加载echarts然后在回调函数中开始使用,注意保持按需加载结构定义图表路径

			// 按需加载所需图表
            require(
                [
                    ‘echarts‘,
                    ‘echarts/chart/bar‘,
                    ‘echarts/chart/line‘,
 					‘echarts/chart/pie‘
                ],
                function(ec) {
                    var myChart = ec.init(document.getElementById(‘$id‘));
                    var option = {
                        title : {
                            text: ‘‘,
                            subtext: ‘‘
                        },
                        tooltip : {
                            trigger: ‘axis‘
                        },
                        legend: {
                            $legend
                        },
                        toolbox: {
                            show : true,
                            feature : {
                                mark : true,
                                dataView : {readOnly: false},
                                magicType:[‘line‘, ‘bar‘],
                                restore : true
                            }
                        },
                        calculable : true,
                        xAxis : [$xaxis],
                        yAxis : [{type : ‘value‘}],
                        series : [$series]
                    };

                    myChart.setOption(option);
                }
            );
            </script>
eof;

		echo $script;
	}
}

原文地址: 26点的博客?(http://www.iamlintao.com/?p=3149)

时间: 2024-08-09 11:46:30

***百度统计图表Echarts的php实现类,支持柱形图、线形图、饼形图的相关文章

Amazon SNS移动推送更新——新增百度云推送和Windows平台支持

Amazon SNS(Simple Notification Service)是一种基于云平台的消息通知和推送服务.SNS提供简单的 Web 服务接口和基于浏览器的管理控制台让用户能够简易设置.运行并从云中发送消息通知和推送服务.它为开发人员提供高度可扩展.灵活并且经济高效的从应用发布消息的功能,并立即将这些消息推送给订阅者或其他应用程序. SNS主要提供两大类服务:一种是消息通知服务(Notification),其主要是通过主题/订阅的模式,用短信(SMS).邮件.HTTP/S请求.SQS队列

Android开发调试日志工具类[支持保存到SD卡]

直接上代码: package com.example.callstatus; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; import java.net.UnknownHostException; import java.text.SimpleDateFormat; impor

如何禁止C++ 类支持拷贝

如何禁止C++ 类支持拷贝 C++ 编译器默默地为你做了不少工作 当你写下 class Empty {}; //其实等价于 class Empty { public: Empty() { ... } //default constructor Empty(const Empty &rhs) { ... } //copy constructor ~Empty() { ... } //destructor Empty& operator=(const Empty &rhs) { ...

java 遍历指定包名下所有的类(支持jar)

package com.shdl.htscada.utils; import java.io.File; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.JarURLConnection; import java.net.URL; import java.net.URLClassLoader; import java.util.Enumeration; import 

将百度的ECharts整合到阿里的Weex中。

由于公司的业务,之前PC版产品中,大量的使用了百度的ECharts库.所以现在要做移动端,在大概熟悉了Weex基本语法和搭建环境后,就着手研究如何将这两个好东西糅合起来. 首先,按照Weex官方教程,搭建好基本开发环境后,要再次使用npm安装ECharts的依赖,这里告诉大家一个小技巧,可能有些朋友早已知道,但是我也相信有很多人跟我1个月前一样,对此并不了解,那就是,快速在一个目录中打开cmd. 在指定文件夹中,按住shift,再右键单击鼠标,就会出现如下选项,"在此处打开命令窗口"(

怎样禁止C++ 类支持拷贝

怎样禁止C++ 类支持拷贝 C++ 编译器默默地为你做了不少工作 当你写下 class Empty {}; //事实上等价于 class Empty { public: Empty() { ... } //default constructor Empty(const Empty &rhs) { ... } //copy constructor ~Empty() { ... } //destructor Empty& operator=(const Empty &rhs) { ..

C#+JQuery+.Ashx+百度Echarts 实现全国省市地图和饼状图动态数据图形报表的统计

在目前的一个项目中,需要用到报表表现数据,这些数据有多个维度,需要同时表现出来,同时可能会有大量数据呈现的需求,经过几轮挑选,最终选择了百度的echarts作为报表基础类库.echarts功能强大,界面优美.由于客户是淘宝卖家,因此想要实现每个月全国各个省份各自购力如何,大家可以统计其他的,如果GDP 人口 等等. 百度echarts简介请参考 http://echarts.coding.io/doc/example.html 效果图如下:全部是动态数据 JS代码: <!-- Charts La

vue+echarts实现可拖动节点的折现图(支持拖动方向和上下限的设置)

本篇文档主要是利用echarts实现可拖动节点的折现图,在echarts中找到了一个demo,传送门:https://echarts.baidu.com/examples/editor.html?c=line-draggable,但是不是用vue写的,并且在改写为vue组件的过程中遇到了很多问题,在百度过程中发现并没有相关的文档,所以决定自己开发,并在demo的基础上开发了一些实用的功能,所以把这个过程记录下来.文档中还有很多不够完善的地方,欢迎讨论哈! 需求:制作一个折线图用于显示当前24小时

python类与对象-如何让类支持比较操作

如何让类支持比较操作 问题举例 有时我们希望自定义类的实例间可以使用<, <=, >, >=, ==, !=符号进行比较,我们自定义比较的行为. 比如,有一个矩形,比较两个矩形的实例时,我们希望比较的是面积. 比如,有一个矩形和一个圆形,我们希望比较一个矩形实例和一个圆形实例, 我们希望它们比较的是面积. 解决思路 (1)比较运算符重载,需要实现以下方法 __lt__, __le__, __gt__, __ge__, __eq__, __ne__ (2)使用标准库functions