手把手教你实现echarts3的折线图下钻drilldown功能系列篇二

开场白

好了, 上一篇介绍了关于echarts下钻(drilldown)的一些信息,通过上一篇文章我们知道echarts折线图,柱状图没有支持下钻(drilldown)功能的api,那就需要我们自己动手,丰衣足食了。
这一篇我开始进行实质性的代码演示。你可以按照我的步骤一步一步来做,有什么疑问可以留言我。

欢迎大家访问我的github blog查看更多文章

一.效果贴图

为了避免枯燥无味,我先不贴代码,写贴上我的demo图,这里还会拿上一篇的那个demo图为例。

1.下钻(drilldown)前效果

图片描述

从图可以看出:这是展示2016年1月一直到2016年9月份的数据的折线图。

下钻(drilldown)开始:比如我点击2016年9月份(201609)的这个点,则应该显示一个属于2016年9月份下的每一天的一个折线图。

2.下钻(drilldown)后效果:

图片描述

从图可以看出:这是展示的从2016年9月份0901号开始直到0930号这30天的一个折线图。
完全符合我们的要求,对吧。

3.返回父级所在折线图

这里我提供了一个返回按钮,点击返回按钮后,会重新返回到父级的折线图:
图片描述

4.总结

  • 由这3张图我们能够看出一个标准的折线图下钻(drilldown)功能就出来了。
  • 那么,实现起来复杂了,其实也很简单。因为我们有万能的 setOption 函数。

不废话了,下面开始贴出详细的代码,准备好了吗?

注意:如果有对echarts的最基础的使用还不太了解的话,建议去 官网 看看api和教程之类的,我这里就不再对基础的只是进行赘述了。

二.折线图界面line-drill-down.html

<!DOCTYPE html>
<html style="height: 100%">
   <head>
       <meta charset="utf-8">
   </head>
   <body style="height: 100%; margin: 0">
      <div style="margin-left:40%;margin-top:2%">
        <button id='return-button' value=''>返回</button>
      </div>
      <div id="container" style="height: 50%;width: 50%"></div>
      <script type="text/javascript" src="http://echarts.baidu.com/gallery/vendors/echarts/echarts-all-3.js"></script>
      <script type="text/javascript" src="../jquery.js"></script>
      <script type="text/javascript" src="./drillDown.js"></script>
      <script type="text/javascript">
          var dom = document.getElementById("container");
          var myChart = echarts.init(dom);
          var option = drillDown.getOption(); //获取配置
          drillDown.initChart(myChart,option); // 初始化加载折线图,并显示出来

          // 点击返回按钮,会重新回到一.1的折线图
          $('#return-button').on('click',function(){
              var myChart = echarts.init(dom);
              var option = drillDown.getOption();
              drillDown.initChart(myChart,option);
          });
      </script>
   </body>
</html>

代码解释:

  • 10行:在绘图前我们需要为 ECharts 准备一个具备高宽的 DOM 容器;
  • 13行:加载了一个drillDown.js文件,详细代码见下面的第三步;
  • 61,62行:基于准备好的dom,初始化echarts实例;
  • 63行:指定图表的配置项;
  • 64行:使用封装好的initChart方法为图表填充数据,并使用63行的配置项和64行的数据来显示图表.

这里都是echarts的基础知识,详细的可以点击这里进行充电。

三.drillDown.js代码

在这个js文件里我封装了几个方法:

  • getOption: 获取当前echart对象的配置数组,我就不再详细讲解了。
  • initChart: 初始化折线图,这个方法做了两件事:

    • 显示图表;
    • 为图表添加点击事件,也就是点击 返回按钮时触发的事件,详细逻辑看代码。

看代码:

var drillDown = {
    getOption : function () {
        var option = null;
                option = {
                    title: {
                        text: '折线图下钻(drilldown)示例',
                        left: 'center'
                    },
                    tooltip: {
                        trigger: 'item',
                        formatter: '{a} <br/>{b} : {c}'
                    },
                    legend: {
                        left: 'left',
                        data: ['月数据']
                    },
                    xAxis: {
                        type: 'category',
                        name: 'x',
                        splitLine: {show: false},
                        data: ['201601', '201602', '201603', '201604', '201605', '201606', '201607', '201608', '201609']
                    },
                ......
};

由于代码篇幅过长,影响阅读性,我这里不详细贴出,大家可以从这里下载。

四.后台数据接口代码data.php

这里我写了伪代码,大家看一下应该就能够明白了:

<?php
    // 这里的接口代码伪代码大概如下:
    function getInterfaceData($month) {
        // 1.写查询语句,这里只是写伪代码,自己做防sql注入
        $sql =  "select ... from table where month = $month";
        // 2.连接数据库,查询结果为$data
        // 3.对查询的结果进行组装,返回json格式的数组
        $chartResult = [];
        // 4.取出x轴的值
        $chartResult['xAxis'] = $data['report_date'];
        // 5.为第一个series赋值,我们这里的demo只有一条折线
        $yAxisArr['yAxis'][0] = $data['data0'];

        // 如果有多条折线的情况下,可以这样写
        // $yAxisArr['yAxis'][5] = $data['data1'];
        // $yAxisArr['yAxis'][6] = $data['data2'];

        // 6.为y轴赋值
        $chartResult['yAxis'] = $yAxisArr;
        // 7.返回json格式的数据
        exit(json_encode($chartResult));
    }
?>

说明:

`data.php每一步我都有详细的注释,该方法主要是返回一个json格式的字符串,来供ajax回调使用。
客户端再拿到这个json字符串后,再进行拆分,分别给图表的x轴和y轴赋值即可。`

五.代码下载

图片描述

demo下载点击 这里

六.总结

  • 好了,如果在第二部分中直接使用我模拟的测试数据的话,可以先不理会data.php的代码。
    直接打开line-drill-down.html运行即可测试;
  • 跑通后,需要与后台接口打通时,可以看一下data.php的一个思路,根据自己的业务写逻辑,然后再做测试即可;
  • 大家在测试的过程中有什么问题,可以跟我留言,我会在第一时间回复;
  • 码字不易,转载请注明出处。

最近结合hexo和github pages又搭建了一个新的博客,我会慢慢的将sae博客的文章逐渐迁移过去,欢迎大家访问。

欢迎大家访问我的新系列文章,主要是讲用最新版的express怎么去开发一个简单的blog.
目前已经更新两篇:手把手教你开发nodejs微博网站-开站篇
手把手教你开发nodejs微博网站-首页篇
最近在学习nodejs,欢迎大家在看过后踊跃拍砖。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的柱状图带下Echarts 图例: ```javascript // 基于准备好的dom,初始化echarts实例 var myChart = echarts.init(document.getElementById('main')); // 指定图表的配置项和数据 var option = { title: { text: '销售额统计', subtext: '数据来自: XXX公司' }, tooltip: { trigger: 'axis', axisPointer: { // 坐标轴指示器,坐标轴触发有效 type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' } }, legend: { data:['销售额'] }, grid: { left: '3%', right: '4%', bottom: '3%', containLabel: true }, xAxis: { type: 'category', data: ['周一','周','周三','周四','周五','周六','周日'], axisTick: { alignWithLabel: true } }, yAxis: { type: 'value' }, series: [ { name:'销售额', type:'bar', barWidth: '60%', data:[100, 200, 300, 400, 500, 600, 700], itemStyle: { color: '#2f4554' }, emphasis: { itemStyle: { color: '#c23531' } }, // 添加下事件 drilldown: { series: [ { name: '周一', type: 'bar', data: [10, 20, 30, 40, 50, 60, 70], itemStyle: { color: '#2f4554' }, emphasis: { itemStyle: { color: '#c23531' } } }, { name: '周', type: 'bar', data: [20, 30, 40, 50, 60, 70, 80], itemStyle: { color: '#2f4554' }, emphasis: { itemStyle: { color: '#c23531' } } } ] } } ] }; // 使用刚指定的配置项和数据显示图表。 myChart.setOption(option); // 添加下事件 myChart.on('click', function (params) { if (params.seriesIndex === 0 && params.componentType === 'series') { myChart.dispatchAction({ type: 'downplay', seriesIndex: 0 }); myChart.dispatchAction({ type: 'highlight', seriesIndex: 0, dataIndex: params.dataIndex }); myChart.setOption({ series: option.series[0].drilldown.series[params.dataIndex] }); } }); ``` 在这个例子中,我们创建了一个简单的柱状图,其中包含了一些基本的配置项,例如标题、图例、网格和坐标轴。我们还添加了一个下功能,当用户单击柱状图时,它会显示该数据的详细信息。 这个下功能是通过 Echarts 的 `drilldown` 和 `dispatchAction` 方法实现的。 在 `drilldown` 中,我们定义了一些子系列,当用户单击柱状图时,它会显示相应的子系列。 在 `click` 事件处理程序中,我们检查用户单击的是哪个系列,然后使用 `dispatchAction` 方法更新图表的选中状态和子系列
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值