2012-07-13 126 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