Echarts. Как обновить две серии в графике realtim ie? - PullRequest
1 голос
/ 18 февраля 2020

У меня есть график в реальном времени https://codepen.io/xnkka/pen/qBdNpmo, в котором есть две серии, обновление с помощью setOption работает только для одной серии. Как это исправить?

myChart.setOption({
    xAxis: {
      data: startDataCat,
    },
    series: [{
      data: startDataVal
    },
    {
      data: startDataVal2
    },
    ]
  });

1 Ответ

0 голосов
/ 19 февраля 2020

Только что проверил ваш код, похоже, вы пропустили удаление значения из второго набора данных. Вы забыли добавить приведенную ниже инструкцию, в которой вы удаляете данные из начала второго набора данных.

startDataVal2.shift ();

Я обновил ваш код и сделал следующий пост.

var myChart = echarts.init(document.getElementById('main'));
    var dataCount = 500;
    var data = generateData(dataCount);
    var data2 = generateData(dataCount);
    var startDataCat = data.categoryData.slice(0, 250);
    var endDataCat = data.categoryData.slice(250);
    var startDataVal = data.valueData.slice(0, 250);
    var startDataVal2 = data2.valueData.slice(0, 250);
    var endDataVal = data.valueData.slice(250);
    var endDataVal2 = data2.valueData.slice(250);

    var option = {
      title: {
        text: "live chart",//
        left: 10
      },
      toolbox: {
        feature: {
          dataZoom: {
            yAxisIndex: false
          },
          saveAsImage: {
            pixelRatio: 2
          }
        }
      },
      legend: {
        data: ['first', 'second'],
       
    },
      tooltip: {
        trigger: 'axis',
        axisPointer: {
          type: 'shadow'
        }
      },      
      grid: {
        bottom: 90
      },
      dataZoom: [{
        type: 'inside'
      }, {
        type: 'slider'
      }],
      xAxis: {
        data: startDataCat,
        silent: false,
        splitLine: {
          show: false
        },
        splitArea: {
          show: false
        }
      },
      yAxis: {
        splitArea: {
          show: false
        }
      },
      series: [{
        name: 'first',
        type: 'line',
        data: startDataVal,
        // Set `large` for large data amount
        large: true
      },
      {
        name: 'second',
        type: 'line',
        data: startDataVal2,
        // Set `large` for large data amount
        large: true
      }
      ]
    };
    setInterval(function () {
      startDataCat.shift();
      startDataCat.push(endDataCat.shift())
      startDataVal.shift();
      startDataVal2.shift();
      startDataVal.push(endDataVal.shift())
      startDataVal2.push(endDataVal2.shift())
      myChart.setOption({
        xAxis: {
          data: startDataCat,
        },
        series: [{
          data: startDataVal
        },
        {
          data: startDataVal2
        },
        ]
      });
    }, 1000);
    function generateData(count) {
      var baseValue = Math.random() * 1000;
      var time = +new Date(2020, 1, 1);
      var smallBaseValue;

      function next(idx) {
        smallBaseValue = idx % 30 === 0
          ? Math.random() * 700
          : (smallBaseValue + Math.random() * 500 - 250);
        baseValue += Math.random() * 20 - 10;
        return Math.max(
          0,
          Math.round(baseValue + smallBaseValue) + 3000
        );
      }

      var categoryData = [];
      var valueData = [];

      for (var i = 0; i < count; i++) {
        categoryData.push(echarts.format.formatTime('yyyy-MM-dd\nhh:mm:ss', time));
        valueData.push(next(i).toFixed(2));
        time += 1000;
      }

      return {
        categoryData: categoryData,
        valueData: valueData
      };
    }
    myChart.setOption(option)
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <div id="main" style="width:1000px; height:400px;"></div>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/echarts/4.6.0/echarts.min.js"></script>
</body>

</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...