2015-09-17 1 views
1

У меня есть диаграмма столбцов, которая отображает две серии с данными в течение нескольких лет.Как ссылаться на точку данных (или точки) в другой серии в высоких диаграммах

Y-ось представляет собой число Х-ось год

Каждый год имеет столбец для каждой из серий (два).

Я хочу создать метку данных для этих столбцов, которая показывает процент от общей суммы значения двух столбцов (значение серии) за каждый год. Для этого мне нужно указать как текущее значение y, так и сумму двух значений y в заданной категории (году).

Я пытался что-то вроде этого:

  series: { 
       dataLabels:{ 
        enabled:true, 
        formatter:function() { 
         var pcnt = (this.y/(series[0].y + series[1].y)) * 100; 
         return Highcharts.numberFormat(pcnt) + '%'; 
        } 
       } 
      } 

В попытке использовать индекс серии, подводя два и «это» ключевое слово, чтобы сослаться на значение у текущего столбца, но это делает не работает (график не отображает и консольных примечания:

Uncaught ReferenceError: series is not defined

Вот jsfiddle моей работы в ходе

а вот копия compelte кода Я пытаюсь реализовать для этого графа

$(function() { 


    $('#e_74').highcharts({ 
     chart: { 
      type: 'column' 
     }, 
     credits: { 
     enabled: false 
     }, 
     noData: { 
      style: { 
       fontWeight: 'bold', 
       fontSize: '20px' 
      } 
     }, 
     title: { 
      text: 'Title', 
     }, 
     navigation: { 
      buttonOptions: 
      { 
       enabled: false 
      } 
     }, 
     xAxis: { 
       categories: [2013] 
     }, 
     yAxis: { 
      min: 0, 
      title: { 
       text: 'Number of facilities' 
      } 
     }, 
     tooltip: { 
      headerFormat: '<span style="font-size:10px">{point.key}</span><table>', 
      pointFormat: '<tr><td style="color:{series.color};padding:0">{series.name}: </td>' + 
       '<td style="padding:0"><b>{point.y:,.0f} </b></td></tr>', 
      footerFormat: '</table>', 
      shared: true, 
      useHTML: true 
     }, 
     plotOptions: { 
      column: { 
       pointPadding: 0, 
       borderWidth: 0 
       }, 
      series: { 
dataLabels:{ 
         enabled:true, 
         formatter:function() { 
          var pcnt = (this.y/(series[0].y + series[1].y) * 100; 
          return Highcharts.numberFormat(pcnt) + '%'; 
         } 
        } 
       } 
      }, 
      series: [{showInLegend: true, name: 'With trained staff', data: [350]}, {showInLegend: true, name: 'Without trained staff', data: [500]}] 
     }); 
    }); 
+0

вар PCNT = (this.y/(серия [0] .y + серия [ 1] .y) * 100;) отсутствует –

ответ

1

Вы можете получить доступ к диаграммам в пределах вашей функции форматировочной с помощью

var chartt = $('#e_74').highcharts(); 

См updated fiddle для него. На всякий случай я что-то упустил, я оставил оператор console.log, чтобы вы могли видеть, что и как вы можете получить доступ к другим данным. В качестве примечания, вы также отсутствует окончание скобка в вашем форматировщиком:

var pcnt = (this.y/(chartt.series[0].yData + chartt.series[1].yData) * 100); 
+0

Это выглядит хорошо, но проценты выходят как ноль еще? Hmm похоже, что необходимо parseInt yData, иначе он обрабатывает их как строку, а затем проценты выходят как ноль, поэтому я добавил следующее: 'var sum = parseInt (chartt.series [1] .yData, 10) + parseInt (chartt.series [0] .yData, 10); ' И использовал сумму var как знаменатель в вычислении процентиля - большое спасибо за вашу помощь – Gideon

0

Вот working fiddle

 dataLabels:{ 
        enabled:true, 
        formatter:function(e) { 
         var ChartX = $('#e_74').highcharts();        
         var pcnt = (this.y/(ChartX.series[0].yData[0] + 
         ChartX.series[1].yData[0]) * 100); 
         return Highcharts.numberFormat(pcnt) + '%'; 
        } 
       } 
Смежные вопросы