Javascript JSON中包含多个系列的Highcharts
经过几天的阅读和测试(并且已经在这里发布了一个错误的问题),我真的需要你,因为我一次又一次的失败 我的目标是:在同一个图表上有许多系列(以及未来的许多图表) 我的数据源:一个mysql和一个json输出:Javascript JSON中包含多个系列的Highcharts,javascript,json,highcharts,Javascript,Json,Highcharts,经过几天的阅读和测试(并且已经在这里发布了一个错误的问题),我真的需要你,因为我一次又一次的失败 我的目标是:在同一个图表上有许多系列(以及未来的许多图表) 我的数据源:一个mysql和一个json输出: "[{"name":"Station 1","data":"1360191600,398.625"},{"name":"Station 1","data":"1360192500,398.625"},{"name":"Station 1","data":"1360193400,398.25"}
"[{"name":"Station 1","data":"1360191600,398.625"},{"name":"Station 1","data":"1360192500,398.625"},{"name":"Station 1","data":"1360193400,398.25"},{"name":"Station 1","data":"1360194300,397.375"},{"name":"Station 1","data":"1360195200,397.5"},{"name":"Station 1","data":"1360196100,397.5"},{"name":"Station 1","data":"1360199700,396.75"},{"name":"Station 1","data":"1360200600,397"}...
这些数据就是一个例子,因为在正常时间我有很多站点,有些站点只有时间戳数据
目前我最大的失败是将这些信息发送到series:[]选项
我尝试过一些类似这样的循环:
data=JSON.parse(data) ;
var series = [];
series.data = [];
$.each(data,function(i,ligne) {
var string = JSON.stringify(ligne);
var obj = $.parseJSON(string);
//var index_serie = obj.name.slice(0,1) ;
console.log(obj) ;
points=(obj.data) ;
series.name=obj.name ;
series.data.push(points) ;
}) ;
options.series.push(series) ;
console.log(options.series) ;
var chart = new Highcharts.Chart(options);
图表的选项在ajax调用之前定义
我尝试了另一种json格式,如[“名称”:“station1”,“数据”:“[1321654,10],[5465…”,但我很难在我的sql查询中添加[],而且组有一些限制(2014字符)
因此,请帮助我创建一个漂亮的循环,以便使用名称等渲染多个系列
感谢您的帮助……您不能将“几乎”的JSON更改为“另一个”JSON吗?可能是这样的:
[{
"name":'station 1',
"data": [ [360191600,398.625], [360191600,398.625], [360191600,398.625] ... [360191600,398.625] ]
}, {
"name":'station 2',
"data": [ [360191600,398.625], [360191600,398.625], [360191600,398.625] ... [360191600,398.625] ]
}]
如果没有,则必须为值添加一些解析,例如:
data = JSON.parse(data);
var names = [];
$.each(data, function (i, ligne) {
var ind = names.indexOf(ligne.name),
splited = ligne.data.split(','),
x = parseFloat(splited[0]),
y = parseFloat(splited[1]);
if (ind == -1) {
/*series name spotted first time need to add new series */
ind = names.push(ligne.name) - 1;
options.series.push({
data: [],
name: ligne.name
});
}
if(!isNaN(x) && !isNaN(y)){
options.series[ind].data.push([x,y]);
}
});
使用jsfiddle:哦,是的!非常感谢你!我的“几乎”很好用,但我承认我不理解ind=names.push(ligne.name)-1;我还有两件事:当我重新启动ajax时图表不会重置,我有一个奇怪的UTC pb:我的时间戳在这样的转换器中给我正确的日期/时间()但是我有一个小时的offcet和highgraph结果。
Array.push()
返回新数组的长度,所以要得到最后一个元素的索引,我们需要将长度减少一。然后我们可以在options.series[ind]
中正确地使用它。要重新加载图表,必须调用chart.destroy()
然后为每个系列创建新图表或调用series.setData()
。关于时间戳-尝试设置useUTC:false
。