数据的动态更新


概述

  • ECharts 由数据驱动,而数据的改变会驱动图表展现的改变,因此动态数据的实现也变得异常简单。
  • 所有数据的更新都通过 setOption 实现,我们只需要定时获取数据,setOption 填入数据,而不用考虑数据到底产生了那些变化,ECharts 会找到两组数据之间的差异然后通过合适的动画去表现数据的变化。
  • ECharts 3 中移除了 ECharts 2 中的 addData 方法。如果只需要加入单个数据,在ECharts3中可以先 data.push(value) 后 setOption

完整代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>第一个 ECharts 实例</title>
    <script src="jquery.min.js"></script>
    <!-- 引入 echarts.js -->
    <script src="echarts.min.js"></script>
</head>
<body>
    <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
    <div id="main" style="width: 600px;height:400px;"></div>
    <script type="text/javascript">
        var base = +new Date(2014, 9, 3);
  var oneDay = 24 * 3600 * 1000;
  var date = [];
  var data = [Math.random() * 150];
  var now = new Date(base);

  function addData(shift) {
      now = [now.getFullYear(), now.getMonth() + 1, now.getDate()].join('/');
      date.push(now);
      data.push((Math.random() - 0.4) * 10 + data[data.length - 1]);
      if (shift) {
          date.shift();
          data.shift();
      }
      now = new Date(+new Date(now) + oneDay);
  }
  for (var i = 1; i < 100; i++) {
      addData();
  }
  option = {
      xAxis: {
          type: 'category',
          boundaryGap: false,
          data: date
      },
      yAxis: {
          boundaryGap: [0, '50%'],
          type: 'value'
      },
      series: [
          {
              name:'成交',
              type:'line',
              smooth:true,
              symbol: 'none',
              stack: 'a',
              areaStyle: {
                  normal: {}
              },
              data: data
          }
      ]
  };
  setInterval(function () {
      addData(true);
      myChart.setOption({
          xAxis: {
              data: date
          },
          series: [{
              name:'成交',
              data: data
          }]
      });
  }, 500);

        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));
        myChart.setOption(option)
    </script>
</body>

效果图

图一:

图二:

图一、图二对比我们可以看出数据是在动态变化的

解析

数据更新通过setInterval()方法实现

setInterval()方法

  • setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。
  • setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。
  • 提示: 500 毫秒= 0.5 秒。

被setInterval()调用的方法

  • myChart.setOption()方法
    • myChart.setOption()方法会更新图表,
    • 而数据会在ddData被调用时更新
    • 数据的改变会驱动图表展现的改变
  • addData()方法
    • addData()方法每被调用一次就会更新一次data
    • data的更新包括data和date
      • data对应表中具体的数据
      • date对应x轴的横坐标

故我们的图表每500毫秒会更新一次数据和图表