获取当前在容器中显示的高级图表系列和数据

时间:2017-03-03 06:32:46

标签: jquery angularjs highcharts

遗留代码跨越了许多文件和行,所以我为没有发布任何代码而道歉。

我的场景是我正在使用一些使用highcharts的角度js前端UI。每个图表大约有2到5个系列,系列数据是从Spring MVC后端获取请求中检索的。 我想要做的是,计算当前正在调度的高级图窗口中所有系列的总体最小位置(仅计算可见系列和缩放区域的最小值),并在该图表下方绘制另一个系列(称之为'目标&#39 ;系列)动态。

目前,前端类似于,当向后端发送获取请求时,基于返回的数据,计算最小位置并在某个y轴处绘制为水平线。但是当我们隐藏任何系列或缩放任何图表时,' X'系列仍保持在同一y轴上,因为它在开始时计算。

有没有办法让我的任务完成?我尝试在每次重绘时拦截chart.events.redraw。但我不知道如何在运行时获取当前正在容器上显示的当前图表系列和数据。

已经定义了单独的函数来计算系列和数据的最小位置。所以我需要知道,如何在chart.events.redraw中找到图表当前可见的系列和数据?在此先感谢... :)

options: {
  chart: {
    type: 'line',
    zoomType: 'x',
    events: {
      redraw: function() {
        redraw: function(event) {
        var eventExtrems = [];
        eventExtrems[0] = Math.min();
        eventExtrems[1] = Math.max();
        // var selectedSeries = $scope.joltsVsNovaLiveJobsConfig.series;
        var selectedSeries = this.series;
          for (var i = 0; i < selectedSeries.length; i++) {
            if(selectedSeries[i].name != 'Events' && selectedSeries[i].data.length != 0 && selectedSeries[i].visible){
              var dataset = selectedSeries[i].data;
              var extrems = [];
              extrems[0] = Math.min.apply(Math,dataset.map(function(item){return item.y;}));
              extrems[1] = Math.max.apply(Math,dataset.map(function(item){return item.y;}));
              eventExtrems[0] = eventExtrems[0] > extrems[0] ? extrems[0] : eventExtrems[0];
              eventExtrems[1] = eventExtrems[1] < extrems[1] ? extrems[1] : eventExtrems[1];
            }
          }

          for (var i = 0; i < selectedSeries.length; i++) {
            if(selectedSeries[i].name == 'Events'){
              eventExtrems[0] = eventExtrems[0] !== Math.min() ? eventExtrems[0] : 0;
              eventExtrems[1] = eventExtrems[1] !== Math.max() ? eventExtrems[1] : 0;
              var yValue = eventExtrems[0] - ((eventExtrems[1] - eventExtrems[0]) * 0.1);
              _.each(this.series[i].data, function(item) {
                item.y = yValue;
              });
              this.series[i].setData(selectedSeries[i].data, false);
              this.series[i].isDirty = true;
              // chart.redraw();
            }

          }
      }
    }
  },...

0 个答案:

没有答案