2016-11-07 183 views
0

我想將累積圖轉換爲非累積圖。基本上我有演示給你看:使用高度表將累積圖轉換爲非累積圖

這是累積的圖: http://jsfiddle.net/h1qq1rj8/

這是非累積圖: http://jsfiddle.net/h1qq1rj8/2/

$(function() { 
    Highcharts.chart('container', { 
     chart: { 
      type: 'column' 
     },  
     title: { 
      text: 'Total fruit consumtion, grouped by gender' 
     },  
     xAxis: { 
      categories: ['Apples', 'Oranges', 'Pears', 'Grapes', 'Bananas'] 
     },  
     yAxis: { 
      allowDecimals: false, 
      min: 0, 
      title: { 
       text: 'Number of fruits' 
      } 
     },  
     tooltip: { 
      formatter: function() { 
       return '<b>' + this.x + '</b><br/>' + 
        this.series.name + ': ' + this.y + '<br/>' + 
        'Total: ' + this.point.stackTotal; 
      } 
     },  
     plotOptions: { 
      column: { 
       stacking: 'normal' 
      } 
     },  
     series: [{ 
      name: 'John', 
      data: [1, 8, 12, 13, 23], // I need to convert this data to non-cumulative 
      stack: 'male' 
     }] 
    }); 
}); 

我已經累積的數據,將其轉換成非累積數據我在後端減去數據,但由於我的性能變慢,是不是有一個選項可以使圖表在Highcharts API本身中不累積?

編輯:

我多了一個圖,其中數據以不同的方式格式化: http://jsfiddle.net/h1qq1rj8/3/

+1

第三個元素應該是5(12-8)或4(12-8-1)? – Dekel

+0

它應該是4,謝謝你指出,我已經用固定的信息編輯了這個問題。 – user1735921

回答

1

Highcharts繪製圖表之前不會做你的數據進行計算,但是可以移動的這個計算從服務器端到客戶端的特定部分。

您可以使用陣列上的reduce函數來獲得期望的結果:

old_ar = [1, 8, 12, 13, 23] 
 
new_ar = old_ar.reduce(function(a, b, c, d) { if (a.length) {a.push(d[c]-d[c-1])} else {a = [b]} return a;}, []) 
 
console.log(new_ar)

對於數據的第二風格,你可以使用這個:

old_ar = [[0,1],[1,8],[2,12],[3,13],[4,23]] 
 
new_ar = old_ar.reduce(function(a, b, c, d) { if (a.length) {a.push([d[c][0], d[c][1]-d[c-1][1]])} else {a = [b]} return a;}, []) 
 
console.log(new_ar)

+0

嗨,謝謝,那就是訣竅!但我還有一張圖,數據沒有像這樣格式化,就像這樣:http://jsfiddle.net/h1qq1rj8/3/ – user1735921

+0

所以基本上你問一個問題,但你的意思是別的嗎? :)(你也可以使用'reduce'函數......你只需要寫一點不同) – Dekel

+0

增加了第二種風格 – Dekel