当前位置:首页 > 技术分析 > 正文内容

EChart中时间线控件实践

ruisui884周前 (05-21)技术分析19

前言

项目中前端(angular)开发中需要使用到基于时间线的UI控件,初步调研两种,可以参考下面链接

https://ng.ant.design/components/slider/zh

https://echarts.apache.org/zh/cheat-sheet.html

https://echarts.apache.org/zh/option.html#timeline

echarts的timeline

本文进行了简化和集成进angular中,需求是基于时间线展示北京、天津、河北、南京四地2000年每个月的经济指标。最终效果图:

首先在html中,声明div

<div id="lineChart" style="width:100%;height:500px"></div>

在ts脚本中

import { Component, OnInit } from '@angular/core';
import { EChartOption } from 'echarts';

import * as echarts from 'echarts';
import { title } from 'process';

@Component({
  selector: 'app-echart-time-demo',
  templateUrl: './echart-time-demo.component.html',
  styleUrls: ['./echart-time-demo.component.css']
})
export class EchartTimeDemoComponent implements OnInit {
  initCharts() {
    const ec = echarts as any;
    let lineChart = ec.init(document.getElementById('lineChart'));

    let lineChartOption = {
      baseOption: {
        timeline: {
          axisType: 'category',//time
          // realtime: true,
          // loop: false,
          autoPlay: true,
          // currentIndex: 2,
          playInterval: 1000,   
          //时间线刻度值      
          data: [
            '2000-01', '2000-02', '2000-03',
            '2000-04', '2000-05', '2000-06',
            '2000-07', '2000-08', '2000-09',
            '2000-10', '2000-11', '2000-12'
          ],
          label: {
            formatter: function (s) {
              return s;
            }
          }
        },

        title: {
          subtext: '数据来自国家统计局'
        },
		
        xAxis: [{
          type: 'category',
          data: ['北京', '天津', '河北', '南京'],
        }],
        yAxis: [{
          type: 'value'
        }],
        //第一组数据展示形态
        series: [{
          type: 'bar'
        }],
      },
      options: [
        {
          title: {
            text: '2000年1月四地经济指标'
          },
          series: [
            { data: [4315, 2150.76, 16018.28, 20000] }
          ]
        }, {
          title: {
            text: '2000年2月四地经济指标'
          },
          series: [{
            data: [5007.21, 2578.03, 6921.29, 20000]
          }]
        },
        {
          title: {
            text: '2000年3月四地经济指标'
          },
          series: [{
            data: [6033.21, 3110.97, 8477.63, 20000]
          }]
        }, {
          title: {
            text: '2000年4月四地经济指标'
          },
          series: [{
            data: [6033.21, 3110.97, 8477.63, 20000]
          }]
        }, {
          title: {
            text: '2000年5月四地经济指标'
          },
          series: [{
            data: [6033.21, 3130.97, 8477.63, 17000]
          }]
        }, {
          title: {
            text: '2000年6月四地经济指标'
          },
          series: [{
            data: [6033.21, 3110.97, 8177.63, 25000]
          }]
        }, {
          title: {
            text: '2000年7月四地经济指标'
          },
          series: [{
            data: [6433.21, 3110.97, 8477.63, 10000]
          }]
        }, {
          title: {
            text: '2000年8月四地经济指标'
          },
          series: [{
            data: [6033.21, 4110.97, 8477.63, 11000]
          }]
        }, {
          title: {
            text: '2000年9月四地经济指标'
          },
          series: [{
            data: [6033.21, 5110.97, 8477.63, 20000]
          }]
        },
      ]
    }
    lineChart.setOption(lineChartOption);
  }

  constructor() { }

  ngOnInit() {
    this.initCharts();
  }
}

从上文的图片中,列表中只展示四个地区的一组数据,未能充分利用,所以考虑再增加一组2000每月四地的消费指标,所以series里增加一个维度

 series: [{
          type: 'bar'
        },{
          type: 'bar'
        }],

而数据里也要增加一组数据

  series: [{
            data: [6033.21, 4110.97, 8477.63, 11000]
          },
          {
            data: [6033.21, 4110.97, 8477.63, 11000]
          }]

如图,柱状图中各地指标多了一组

使用 axisType: 'time'

上文中使用的 axisType: 'category',这样会将时间线上的坐标等分,简单来说两个刻度间距离相等,但实际使用中可能存在刻度间不是等分的,如1:00到1:10到2:00到3:00,很明显1:00到1:10只过了10分钟,直观上这两个刻度距离要小点。所以在echarts中提供了axisType为time的配置。

  let lineChartOption = {
      baseOption: {
        timeline: {
          // axisType: 'category',
          axisType: 'time',
....
          data: [
            '2000-01', '2000-03',
            '2000-04', '2000-05', '2000-06',
            '2000-07', '2000-08', '2000-09',
            '2000-10', '2000-11', '2000-12'
          ],
          label: {
            formatter: function (s) {                  
				 return (new Date(s).getMonth()+1)+'月';
            }
          }

上面的刻度数据(注意是时间格式)中是没有2月份的,使用time,要特殊处理如label的formater。最终效果如下,发现由于2不存在,所以1到3自动跨两个刻度。

事件timelinechanged

lineChart.on('timelinechanged', function (timeLineIndex) {
	...
});

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/4187.html

分享给朋友:

“EChart中时间线控件实践” 的相关文章

“韩版谷歌”Naver进军操作系统,发布自研免费Linux发行版

IT之家 12 月 11 日消息,有“韩版 Google”之称的 Naver 公司正式进军操作系统领域,发布了自主研发的 Linux 发行版 Navix,为企业提供了一个稳定、可靠且免费的 Linux 发行版选择。IT之家援引科技媒体 theregister 观点,此举效仿了谷歌的多元化发展战略,也...

「图解」父子组件通过 props 进行数据交互的方法

1.组件化开发,经常有这样的一个场景,就是父组件通过 Ajax 获取数据,传递给子组件,如何通过 props 进行数据交互来实现,便是本图解的重点。2.代码的结构3.具体代码 ①在父组件 data 中存放数据 ms。 ②将父组件 data 中的数据 ms 绑定到子组件中的属性 ms。 ③子组件在 p...

vue开发微信小程序 - 登录组件

移动端登录功能抽象为通用组件,满足:不同移动端应用中一键登录功能复用支持多种登录:微信登录、H5、QQ登录登录组件使用//引用登录组件 import login from "../components/user/login.vue" export default { compone...

vue.js 双向绑定如何理解,有什么好处!#云南小程序开发

Vue.js 的双向数据绑定是借助于 JavaScript 的一些特性,如对象的属性 getter 和 setter 以及 Vue 的依赖追踪系统实现的。简单来说,双向数据绑定就是数据与视图间的双向通信,也就是说数据的改变会马上反映到视图中,视图的改变也会立刻改变数据。具体来说,当你改变了数据时,视...

Firefox正针对Vue.js进行优化,下版本响应速度将“显著提升”

IT之家 9 月 7 日消息,据 Mozilla 官方博客发文显示,Firefox 浏览器正针对 Vue.js 进行优化,此前 FireFox 浏览器在面向 Vue 3 时遇到了一些性能问题。▲ 图源 Mozilla 官方博客目前开发人员已经对此进行了解决,在 Firefox 118 内部版本中进行...

微信研发新功能,或许有你最期待的

微信在我们日常社交中担任着非常重要的角色,不管是用于学习还是工作,我们越来越离不开微信,微信的任何一个小的变化都会影响到现如今超过12亿的微信用户。就在前一段时间,微信更新了一个“拍一拍”的功能,只要双击好友头像,头像就会有抖动并带有文字提示,一时间众多网友在朋友圈疯狂刷屏,虽然觉得这个功能毫无用处...