Highcharts 显示系列名称但缺少来自 json 源的数据点
Highcharts displays series names but missing data points from json source
我正在使用带有 JSON 数据的 Highcharts 来呈现标准折线图,但在显示系列数据时遇到了一些问题。图表框架和系列名称出现在页面上,所有内容都在控制台中检查出来,所以我知道它已成功获取数据。
当我 运行 通过 JSONLint 时,JSON 输出显示有效,所以我有点困惑为什么这个图表无法正确呈现。
这是我的图表 JAVASCRIPT 代码:
$(document).ready(function() {
var options = {
chart: {
renderTo: 'container',
type: 'line',
zoomType: "x"
},
xAxis: {
type: 'datetime',
tickInterval: 7 * 24 * 3600 * 1000,
labels: {
format: '{value:%b %e, %Y}',
rotation: -45
},
},
yAxis: {
allowDecimals: true,
title: {
text: '$US'
}
},
tooltip: {
xDateFormat: '%b %e, %Y',
},
series: []
}
$.getJSON("mdb_ajax.php", function(json) {
options.series = new Array();
for(i=0;i< json.length;i++) {
options.series.push(json[i]);
}
var chart = new Highcharts.Chart(options);
});
});
这里是对应的PHP FILE:
$price_output = $prices->getPrices($filter_option);
foreach($price_output as $category => $price)
{
$arr[] = array('name' => $category, 'data' => $price);
}
print json_encode($arr);
如您所见,我临时操纵了对象以添加 "name" 和 "data" 键来帮助 Highcharts,但对象结果完全有效 JSON 没有这个额外的工作(它不会以这种方式显示任何内容)。
这是 JSON DATA:
的示例
[
{
"name": "CTGY1",
"data": {
"1414998000000": "6.2400",
"1415084400000": "-3.1110",
"1415170800000": "1.5090",
"1415257200000": "4.2390",
"1415343600000": "1.6990",
"1426140000000": "5.9100"
},
{
"name": "CTGY2",
"data": {
"1414998000000": "7.7890",
"1415084400000": "-0.7610",
"1415170800000": "1.1600",
"1415257200000": "5.3300",
"1415343600000": "1.9290",
"1415602800000": "-0.8260"
}
]
我猜想在处理获取的 JSON 数据时需要对键值进行一些定义,我只是不确定此时会是什么样子。关于执行此操作的最佳方法有什么想法吗?
data
应该是一个数组,在您的情况下 Y 值不应是字符串:
data: [[1415602800000,-0.8260],[],...]
这是 series
中 data
可接受的数据结构
http://api.highcharts.com/highcharts#series.data
Highcharts API 也提供了几个例子:
我正在使用带有 JSON 数据的 Highcharts 来呈现标准折线图,但在显示系列数据时遇到了一些问题。图表框架和系列名称出现在页面上,所有内容都在控制台中检查出来,所以我知道它已成功获取数据。
当我 运行 通过 JSONLint 时,JSON 输出显示有效,所以我有点困惑为什么这个图表无法正确呈现。
这是我的图表 JAVASCRIPT 代码:
$(document).ready(function() {
var options = {
chart: {
renderTo: 'container',
type: 'line',
zoomType: "x"
},
xAxis: {
type: 'datetime',
tickInterval: 7 * 24 * 3600 * 1000,
labels: {
format: '{value:%b %e, %Y}',
rotation: -45
},
},
yAxis: {
allowDecimals: true,
title: {
text: '$US'
}
},
tooltip: {
xDateFormat: '%b %e, %Y',
},
series: []
}
$.getJSON("mdb_ajax.php", function(json) {
options.series = new Array();
for(i=0;i< json.length;i++) {
options.series.push(json[i]);
}
var chart = new Highcharts.Chart(options);
});
});
这里是对应的PHP FILE:
$price_output = $prices->getPrices($filter_option);
foreach($price_output as $category => $price)
{
$arr[] = array('name' => $category, 'data' => $price);
}
print json_encode($arr);
如您所见,我临时操纵了对象以添加 "name" 和 "data" 键来帮助 Highcharts,但对象结果完全有效 JSON 没有这个额外的工作(它不会以这种方式显示任何内容)。
这是 JSON DATA:
的示例[
{
"name": "CTGY1",
"data": {
"1414998000000": "6.2400",
"1415084400000": "-3.1110",
"1415170800000": "1.5090",
"1415257200000": "4.2390",
"1415343600000": "1.6990",
"1426140000000": "5.9100"
},
{
"name": "CTGY2",
"data": {
"1414998000000": "7.7890",
"1415084400000": "-0.7610",
"1415170800000": "1.1600",
"1415257200000": "5.3300",
"1415343600000": "1.9290",
"1415602800000": "-0.8260"
}
]
我猜想在处理获取的 JSON 数据时需要对键值进行一些定义,我只是不确定此时会是什么样子。关于执行此操作的最佳方法有什么想法吗?
data
应该是一个数组,在您的情况下 Y 值不应是字符串:
data: [[1415602800000,-0.8260],[],...]
这是 series
中 data
可接受的数据结构
http://api.highcharts.com/highcharts#series.data
Highcharts API 也提供了几个例子: