2015-05-14 2 views
1

У меня есть диаграмма сгруппированных диаграмм с высоким диалоговом отображением с двумя столбцами для каждого значения по оси x. я хотел бы добавить ярлык над каждой группой с разницей между двумя процентами. Кажется, я не могу найти способ ссылаться на два столбца в опции форматирования.Таблицы сгруппированных столбцов Highcharts

Это раздел У меня возникли проблемы с:

column: { 
    dataLabels: { 
     formatter: function() 
     {         
      return this.y; 
     } 
    } 
} 

Где this.y должна быть разница.

Это, как именно в это время http://jsfiddle.net/LLExL/4548/

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

ответ

2

Внутри обратного вызова formatter вы можете использовать свойство series.chart.series[1].yData, чтобы получить значения y второго столбца/серии. yData - это массив всех значений y. Затем вы можете использовать свойство point.index, чтобы получить соответствующую точку второго столбца/серии.

column: { 
    dataLabels: { 
     formatter: function() 
     { 
      var firstColumnValue = this.y; 
      var secondColumnValue = this.series.chart.series[1].yData[this.point.index]; 
      var yourCalculation = (firstColumnValue - secondColumnValue)/firstColumnValue * 100; 
      return yourCalculation.toFixed(2) + '%'; 
     } 
    } 
} 

Обновлено JSFiddle

+0

Это было очень элегантное решение. Оно работало завораживающе. Я немного изменил расчет до var yourCalculation = secondColumnValue/firstColumnValue * 100; – strandmyr

+0

- это 'yData', как-то определенный перед' data' (и до того, как вызывается 'formatter')? –

+0

'yData' и' data' заселяются при создании (или задании) времени, но по-разному. 'yData' содержит чистые значения и' data', преобразованные в точки. Поскольку 'yData' заполняется при создании, да, вы можете предположить, что он будет определен до вызова' formatter'. – dreyescat

0

Одна из возможностей состоит в том, чтобы предварительно рассчитать все различия и просто ссылаться на них в вашем formatter. Например, определить свой series в переменной, и цикл над ним, чтобы создать отдельный diffs массив различий, например:

var series = [{ 
    name: 'Omsetning', 
    data: [ 
     // ... 
    ] 
    } 
    // ... 
]; 

var diffs = []; 

for(i = 0; i < series[0].data.length; i++) { 
    var v1 = series[0].data[i].y; 
    var v2 = series[1].data[i].y; 
    diffs.push((Math.abs(v1-v2)/((v1+v2)/2)) * 100); 
} 

$('#container').highcharts({ 
    plotOptions: { 
     column: { 
      dataLabels: { 
       formatter: function() 
       {         
        return Highcharts.numberFormat(diffs[this.x])+"%"; 
       } 
      } 
     } 
    } 
    series: series 
    // ... 
}); 

См this JSFiddle demonstration, как она выглядит.

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