ThinkPHP中使用echarts

ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖矢量图形库 ZRender,提供直观,交互丰富,可高度个性化定制的数据可视化图表。

第一步:下载 ECharts

你可以通过以下几种方式获取 ECharts。

第二步:使用 ECharts

首先我要获取extend里的日志文件里面的数据:

    public function index()
    {
        //file_get_contents() 函数是用于将文件的内容读入到一个字符串中的首选方法
        //file_get_contents函数把整个文件读入一个字符串中。和 file() 一样,不同的是 file_get_contents() 把文件读入一个字符串。
        $data = file_get_contents("../extend/as.s803.com.flow.log");
        //分割,返回数组
        $logs =  explode("\n",$data);

        $this->assign("logs",$logs);
        return $this->fetch();
    }    

接着,我就将数据展示HTML页面上:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!-- 引入 echarts.js -->
    <script src="__PUBLIC__/js/echarts.min.js"></script>
    <script src="__PUBLIC__/js/jquery-1.11.3.js"></script>
</head>
<body>
    <input type="radio" name="myNay" value="0">原样
    <input type="radio" name="myNay" value="0.5" checked>半小时
    <input type="radio" name="myNay" value="1">1小时
    <!-- 为 ECharts 准备一个具备大小(宽高)的 DOM -->
    <div id="main" style="width: 1400px;height:600px;"></div>
</body>
</html>

使用JavaScript获取数据,按半小时来得到平均值(时间长度可调整)

<script>
    //流量的数据
    var data = {:json_encode($logs)};
    var outflow = [];//流出流量
    var flow_into = [];//流入流量var logs_array = [];//最终流量数据//日期转时间戳
    var thirty = []; //分隔的时间
    var flow_time = [];
    var time1  = new Date(‘2014-08-21 00:00:00‘).getTime();
    // 基于准备好的dom,初始化echarts实例
    var myChart = echarts.init(document.getElementById(‘main‘));

    //时间戳转日期
    function timestampToTime(timestamp) {
        var date = new Date(timestamp);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
        var Y = date.getFullYear() + ‘-‘;
        var M = (date.getMonth() + 1 < 10 ? ‘0‘ + (date.getMonth() + 1) : date.getMonth() + 1) + ‘-‘;
        var D = date.getDate() + ‘ ‘;
        var h = date.getHours() + ‘:‘;
        var m = date.getMinutes() + ‘:‘;
        m = parseInt(m)>10 ? m : "0"+m;
        var s = date.getSeconds()+"0";
        return Y + M + D + h + m + s;
    }

    function logs_fun(classify=0.5) {
        //日期
        for (var i=0; i<data.length; i++){
            flow_time.push([new Date(‘2014-08-21 ‘+data[i][0]).getTime(),data[i][1],data[i][2]])       //原样输出
            if(classify==0){
                outflow.push({
                    name:‘2014-08-21 ‘+data[i][0],
                    value:[‘2014-08-21 ‘+data[i][0], data[i][1]]
                });
                flow_into.push({
                    name:‘2014-08-21 ‘+data[i][0],
                    value:[‘2014-08-21 ‘+data[i][0], data[i][2]]
                });
            }

            outflow_data.push(data[i][1]);
            flow_into_data.push(data[i][2]);
        }
        if(classify>0){
            //分隔是30分钟
            for (var i=0; i<=24/classify; i++){
                thirty.push(time1+i*classify*3600*1000);
            }
//最终显示的流量数据
            for (var i=0; i<logs_array.length; i++){
                outflow.push({
                    name:logs_array[i][0],
                    value:[logs_array[i][0], ""+Math.round(logs_array[i][1])]
                });
                flow_into.push({
                    name:logs_array[i][0],
                    value:[logs_array[i][0], ""+Math.round(logs_array[i][2])]
                });
            }
        }

        //指定图表的配置项和数据
        option = {
            title: {
                text: ‘2014年8月21号流量图‘,        //标题
            },
            legend: {
                data: [‘流出流量‘, ‘流入流量‘]    //图例组件展现了不同系列的标记,与name对应
            },
            xAxis: {
                type: ‘time‘,
                splitLine: {
                    show: false
                },
                maxInterval: 3600 * 1 * 1000,   //分隔
                min:"2014/08/21 00:00:00",      //最大时间
                max:"2014/08/22 00:00:00"       //最小时间
            },
            yAxis: {
                type: ‘value‘
            },
            series: [
                {
                    symbol:"none",      //去掉折线上面的小圆点
                    name: ‘流出流量‘,    //与legend的data对应
                    data:  outflow,
                    type: ‘line‘,
                    areaStyle: {},
                },
                {
                    symbol:"none",      //去掉折线上面的小圆点
                    name: ‘流入流量‘,
                    data:  flow_into,
                    type: ‘line‘,
                    areaStyle: {}
                }
            ],
            dataZoom:[{
                type:"inside"
            }],
        };

        //使用刚指定的配置项和数据显示图表
        myChart.setOption(option);
    }

    logs_fun();

     //点击切换图表
    $("input").click(function () {
        //清空流量数据
        outflow = [];
        flow_into = [];
        flow_time = [];

        //重新加载
        logs_fun($(this).val());
    })
</script>

注意:xAxis.type="time"属性的话,它的时间格式最好是“2014/08/21 00:00:00”(2014-08-21也可以),如果是“2014/08/21 3:0:0”会不显示图表。

原文地址:https://www.cnblogs.com/bushui/p/12337591.html

时间: 2024-08-01 04:29:29

ThinkPHP中使用echarts的相关文章

ThinkPHP中的视图

ThinkPHP中的视图View 1.什么是视图View 所谓的视图就是用户可视化操作界面. 2.视图View组成 view类(模板引擎类似Smarty) 模板文件(html模板) 3.视图的定义 默认视图的定义规则: ./项目目录/Home或Admin模块下的View文件夹/Public控制器名称/login操作方法.html ① 在控制器中定义相关操作方法,如下图所示: ② 在./Application/Admin/View/Public文件夹下创建login.html模板文件 ③ 显示效果

ThinkPHP中的模型

ThinkPHP中的模型 1.什么是模型(Model) 模型表示企业数据和业务规则,实际项目开发中,主要实现与数据库进行操作. 2.模型的定义规则 模型类的命名规则是除去表前缀的数据表名称,采用驼峰法命名,并且首字母大写,然后加上模型类的关键词Model,再加上类文件后缀.class.php 案例:实现移动办公自动化系统的组织结构功能 ① 设计数据库db_think ② 设计数据表结构(tk_dept) id ???? 编号 ????int 自动增长 主键 name 部门名称 varchar(4

ThinkPHP中 按条件查询后列表显示

最近在项目中遇到了需要根据下拉框的条件筛选出符合条件的数据,然后进行列表显示的问题. 在ThinkPHP中进行列表显示的传统过程:通过在后台控制器中查询出数据,然后通过$this->assign()来实现控制器数据向页面的传递,在页面中通过<foreach>或<volist>标签来进行数据的解析,(注:在通过标签进行数据的解析时需要以“$”符号的形式). 在进行条件查询时,需要通过jquery中ajax的方式将条件GET到后台控制器,后台控制器中接收数据,然后根据条件进行查询

ThinkPHP中的__initialize()和类的构造函数__construct()

ThinkPHP中的__initialize()和类的构造函数__construct()网上有很多关于__initialize()的说法和用法,总感觉不对头,所以自己测试了一下.将结果和大家分享.不对请更正.首先,我要说的是1.__initialize()不是php类中的函数,php类的构造函数只有__construct().2.类的初始化:子类如果有自己的构造函数(__construct()),则调用自己的进行初始化,如果没有,则调用父类的构造函数进行自己的初始化.3.当子类和父类都有__co

thinkphp中URL传参数的几种方式

在thinkphp中,url传参合asp.net中原理类似,下面就单个参数和多个参数传递方式进行一个简单讲解 1.传单个参数 单个参数这种比较简单,例如 想像edit操作里面传递一个id值,如下写法__URL__/edit/id/1 http://localhost/index.php/user/edit/id/1 id和其值1要分别位于/后面 后台获取id通过    $id=$_GET['id']   即可获取其具体值. 2.传多个参数 传多个参数相对比较麻烦一点,可以通过两种方式 第一种:传

ThinkPHP中I(),U(),$this-&gt;post()等函数

在ThinkPHP中在控制器中接受表单的数据可以用 1.$_POST[]/$_GET[],但是这个接受的表单内容不会通过htmlspecialchars();函数进行过滤.如果想使用这个接收数据,需要手动处理表单数据 2.可以用接收表单函数 $this->_post();$this->_get();函数,这个函数默认就会使用htmlspecialchars()进行过滤,不用手动过滤. 3.在thinkphp3.1.3中有一个新的函数I();直接接收表单数据,并默认为htmlspecailcha

thinkphp中I(&quot;parm&quot;)用法的注意事项

php中用来传输的方式有两种$_GET 和 $_POST, thinkphp 提供了一种兼容两中传输方式的做法I(“param”) 但是请注意:在使用php中的函数时需要传入参数时不能用I(“parm”),必须使用采用的传输方式$_GET 或 $_POST传入,否则出错 thinkphp中I("parm")用法的注意事项,布布扣,bubuko.com

[转]ThinkPHP中实例化对象M()和D()的区别,select和find的区别

1.ThinkPHP中实例化对象M()和D()的区别 在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会自动调用M方法.通俗一点说:M实例化参数是数据库的表名.D实例化的是你自己在Model文件夹下面建立的模型文件 例如:$user = new UserModel(); 等价于$user = D('user'); 如果实例化的是一个空模型 例如 $Demo = new Model(); 那么它等价于

ThinkPHP中的内置标签

ThinkPHP中的内置标签 1.内置标签分类 闭合标签 <tag></tag> 开放标签 <tag /> 2.包含文件标签 主要功能:实现对文件的包含(类似于require或include) 基本语法: <include?file="模板文件名"?/> 特别注意:include标签中模板文件的路径是基于项目的入口文件(index.php)位置. 案例:实现项目首页功能 ① 在View视图模板中,创建一个Public文件夹,作为公用文件夹