2015-11-23 3 views
0

У меня есть диаграмма столбцов, подобная этому примеру http://jsfiddle.net/2mvuLLs9/5/. В легенде отображается общая сумма, которую я использовал для цикла для подсчета вручную:* Highcharts * Параметры масштабирования и обновления в Highcharts

for(var j =0; j< value.length;j++){ 
    total[j]=0; 
    for(var k =0; k<value[j][1].length;k++){ 
     total[j]= total[j]+value[j][1][k][1]; 
    }  
} 

. Я также использую функцию масштабирования: zoomType : 'x' , чтобы сосредоточиться на интересующей области. Вопрос: можно ли снова обновить легенду, которая показывает общую сумму только области, которую я увеличил?

спасибо!

+0

Может, вероятно, использовать 'selection' событие для подсчета значений в диапазоне и обновление легенды этикеток. –

+0

@ Хэлвор: извините, я не понял, что вы могли бы рассказать подробнее? – Ock

ответ

2

Это возможно, обновив параметры вашей серии. Вы можете обновить его внутри функции обратного вызова для события afterSetExtremes: http://api.highcharts.com/highcharts#xAxis.events.afterSetExtremes

Внутри него вы можете использовать getExtremes(), чтобы получить новое минимальное и максимальное значение вашей оси. http://api.highcharts.com/highcharts#Axis.getExtremes

Вы можете просто проверить, находится ли точка вашей серии между минимальным и максимальным значением и суммами всех точек, находящихся между ними. Затем вы можете изменить свой customlegendText.

  afterSetExtremes: function() { 
       var sum = 0; 
       min = parseFloat(this.getExtremes().min); 
       max = parseFloat(this.getExtremes().max); 
       Highcharts.each(this.series, function (p, i) { 
        sum = 0; 
        Highcharts.each(p.data, function (ob, j) { 
         if (min <= ob.x && ob.x <= max) { 
          sum += ob.y; 
         } 
        }); 
        p.userOptions.customlegendText = sum; 
       }); 
       this.series[0].update({}); 
      } 

пример: http://jsfiddle.net/2mvuLLs9/11/

+0

спасибо Гжегож! – Ock

Смежные вопросы