在Highcharts中使用对象数组来处理系列数据

时间:2014-05-27 15:05:26

标签: highcharts

我想要在highcharts中显示一个对象数组。每个对象都有一个名称和一个值。

我试图通过

让这个工作
var objects = objectArray[]; // objectArray being an array of the objects I want data on
var objectNames = nameArray[]; // This being an array of all the names of the objects
var objectValues = valueArray[]; // An array of all the values of the objects


 series: [{
    data: objects.value,
    name: objects.name
 }]

这让我大吃一惊。所以我尝试建立这样的系列:

 series: [{
    data: objectValues,
    name: objectNames
 }]

这给了我关于值的数据,但是名称是objectNames数组中的所有名称...对于每一个数据。所以我尝试使用

series: [{
    data: objectValues
},
{   
    data: objectNames
}]

这导致看到了objectValues的图表,并在图例中看到了名称的另一个选项 - 这是完全不可接受的,因为没有必要设置一系列标签,对吗?

所以我决定以编程方式构建一个系列,使用foreach循环然后将其传递给构造函数。但是,http://www.highcharts.com/docs/getting-started/how-to-set-options/说这是“糟糕的代码”。

我想要的是能够将一组对象传递给highcharts,告诉它每个数据的'name'将成为该特定对象的名称值,并且数据将是绑定到该特定对象的值字段。有没有办法做到这一点?或者是highcharts认为“坏”的唯一选择?

2 个答案:

答案 0 :(得分:6)

所以我找到了解决方案。

获取数据后,我做了

$.each(item, function (index, value) {
    objects.push([value.name, value.value]);
});

然后用

绑定我的系列
series: [{
     data: objects,
     name: 'Value Type Description'
}]

所以我有"价值类型描述"在图例中,但当我将鼠标悬停在特定点上时,我将名称作为标签,并以图表形式显示有效数据。

我在http://api.highcharts.com/highcharts#series发现如果你有一个二维数组的数组,你可以只传递一个字符串作为第一个参数,它会将它解析为该点的标签。

编辑:每个请求的示例。

因此,series字段,dataname分为两部分。 Name不适用于data,这将是轴的名称。

所以data是键/值对的数组。

data: [
   {[key1, value1]}, 
   {[key2, value2]}, 
   {[key3, value3]}
]

name就是"主要"标签将是 - "我的数据资料"例如。

然后,当您加载图表时,在图例中它应该说"我的数据资料",但是当您将鼠标悬停在特定点上时,比如第一个,它将显示Key1 Value1信息。

答案 1 :(得分:5)

        data: [{
            name: 'Point 1',
            y: 1,
            test1:9,
            test2:'ddaf'
        }, {                         ------->      right
            name: 'Point 2',
            y: 5,
            test1:12,
            test2:'ddddaf'
        }]

        data: [{
            my_name: 'Point 1',
            y: 1,
            test1:9,
            test2:'ddaf'
        }, {                         -------> we change 'name' to 'my_name',
            my_name: 'Point 2',               then the name you want to show become
            y: 5,                             'Slice', instead of 'Point 1','Point 2'
            test1:12,
            test2:'ddddaf'
        }]

        data: [{
            my_name: 'Point 1',
            my_y: 1,
            test1:9,
            test2:'ddaf'
        }, {                         ------->  Now,we get nothing.
            my_name: 'Point 2',
            my_y: 5,
            test1:12,
            test2:'ddddaf'
        }]

所以,'name'和'y'是关键。