2012-07-13 91 views
1

這裏是我的JSON數據如何格式化我的堆棧柱狀圖JSON數據HighCharts

var data = [ 
    {"unit":"a", "status":"Stopped/Idle", "val":21.2022222222222222}, 
    {"unit":"a", "status":"Working", "val":53.3066666666666667}, 
    {"unit":"a", "status":"Headland Turning", "val":0.04694444444444444444}, 
    {"unit":"a", "status":"Transport", "val":5.1425000000000000}, 
    {"unit":"b", "status":"Stopped/Idle", "val":334.7358333333333333}, 
    {"unit":"b", "status":"Working", "val":212.6386111111111111}, 
    {"unit":"b", "status":"Headland Turning", "val":26.2955555555555556}, 
    {"unit":"b", "status":"Transport", "val":0.00444444444444444444} 
]; 

unit是我想要的數據可以通過以下方式進行格式化類別

讓我能在HighCharts中插入series選項:

series: [{ 
       name: 'Stopped/Idle', 
       data: [21.2022222222222222, 334.7358333333333333]}, 
      { 
       name: 'Working', 
       data: [53.3066666666666667, 212.6386111111111111]}, 
      { 
       name: 'Headland Turning', 
       data: [0.04694444444444444444, 26.2955555555555556]}, 
      { 
       name: 'Transport', 
       data: [5.1425000000000000, 0.00444444444444444444]}] 
     }); 

謝謝。

回答

3
var data = [ 
    {"unit":"a", "status":"Stopped/Idle", "val":21.2022222222222222}, 
    {"unit":"a", "status":"Working", "val":53.3066666666666667}, 
    {"unit":"a", "status":"Headland Turning", "val":0.04694444444444444444}, 
    {"unit":"a", "status":"Transport", "val":5.1425000000000000}, 
    {"unit":"b", "status":"Stopped/Idle", "val":334.7358333333333333}, 
    {"unit":"b", "status":"Working", "val":212.6386111111111111}, 
    {"unit":"b", "status":"Headland Turning", "val":26.2955555555555556}, 
    {"unit":"b", "status":"Transport", "val":0.00444444444444444444} 
]; 
var seriesData = []; 
var xCategories = []; 
var i, cat; 
for(i = 0; i < data.length; i++){ 
    cat = 'Unit ' + data[i].unit; 
    if(xCategories.indexOf(cat) === -1){ 
     xCategories[xCategories.length] = cat; 
    } 
} 
for(i = 0; i < data.length; i++){ 
    if(seriesData){ 
     var currSeries = seriesData.filter(function(seriesObject){ return seriesObject.name == data[i].status;}); 
     if(currSeries.length === 0){ 
      currSeries = seriesData[seriesData.length] = {name: data[i].status, data: []}; 
     } else { 
      currSeries = currSeries[0]; 
     } 
     var index = currSeries.data.length; 
     currSeries.data[index] = data[i].val; 
    } else { 
     seriesData[0] = {name: data[i].status, data: [data[i].val]} 
    } 
} 

,你已經seriesDataxCategories您可以通過使用類似的東西圖表實例化

chart = new Highchart({chart: {renderTo: 'chart-div', 
            type: 'column' 
            }, 
          plotOptions: {column: {stacking: 'normal'}}, 
          xAxis:{ categories: xCategories}, 
          series: seriesData 
         }); 

編輯:這裏是的jsfiddle:http://jsfiddle.net/sujay/UMeGS/

+0

謝謝,我認爲你可能會是對的。但它不適用於我的工作,請您在小提琴上張貼工作片段?謝謝 – sozhen 2012-07-13 20:00:38

+0

@SongtaoZ我已經按要求添加了jsfiddle,並且在這裏修正了一些錯誤。對不起,最初的困惑。我寫這個答案時很匆忙。 – Sujay 2012-07-16 06:42:17

+0

謝謝。這就是我最終的目標。我必須從你的代碼中學到很多東西! – sozhen 2012-07-16 07:01:11

1

在HighCharts網站上,我導航到演示庫> HighChart演示部分,並單擊頁面左側的堆疊列。從那裏他們有一個鏈接到JSFiddle with a demo,從那裏我看到了與您相關的兩段代碼。

第一部分是HighChart對象的xAxis屬性。以下是我將其更改爲:

xAxis: { 
    categories: ['Unit A', 'Unit B'] 
} 

這些將成爲您要堆疊數據的每個列。

下一節是series屬性。這是您將要查看的數據傳遞到這些列的地方。它看起來像這樣:

series: [{ 
    name: 'Stopped/Idle', 
    data: [21.2022222222222222, 334.7358333333333333] 
}, { 
    name: 'Working', 
    data: [53.3066666666666667, 212.6386111111111111] 
}, { 
    name: 'Headland Turning', 
    data: [0.04694444444444444444, 26.2955555555555556] 
}, { 
    name: 'Transport', 
    data: [5.1425000000000000, 0.00444444444444444444]       
}] 

在這部分您指定的特定數據類型的名稱,然後你在xAxis屬性指定每一列的值。

我玩過一些選項非常快,有很多你可以用這個做的,但here's the JSFiddle帶有堆積列圖和你的數據。

希望這會有所幫助!現在

+0

這是一個有點硬編碼在裏面。其實我想用我的數據格式化來插入highcharts選項 – sozhen 2012-07-13 18:18:55

+0

Hey @Songtao Z,我想我對這個問題還不是很瞭解。我的例子中使用了你的數據(我不得不重新排列它),小提琴中只有一些額外的選項。我把他們留在那裏,以便你能看到更多的可能性。 – jasonmerino 2012-07-14 23:09:36

+0

對不起傑森,謝謝你的回答。如果發生混淆,我已更新了我的問題。我實際上知道如何將HighCharts選項的哪一部分放入我的數據中,只是不知道如何玩弄我的JSON數據,以便可以通過圖表選項識別而無需任何硬編碼,這意味着我不需要手動將任何數據放入選項中。其實@Sujay做的是我想要的,但他的代碼不起作用。昨天我一直在玩他的代碼,但仍然無法弄清楚如何插入我的json數據。 – sozhen 2012-07-15 01:34:31