我不知道我在这段代码中出错了。
我需要做的是使用数据库中的值绘制HighCharts绘图。价值观随时都可能发生变化
- x轴应标记为“11月30日”作为最后一点,直到“10月30日”为第一点,即30天(我想仅在30天内显示图表)。这是一个例子,日期可以随时间变化。
- JS通过ajax发送请求,结果以json格式返回。这是其中一行:{"time":"2012-08-07 21:15:05","value_1":"1.241110","value_2":"1.241103"}
该图有两行(value_1和value_2),并且都对应于x轴上的相同时间。
我在某处读到了必须将日期格式转换为UTC的地方。这是功能
function get_and_display_data(symbol_1,price_1,period_1,bars_1,constraints_1){
var highchartsOptions = Highcharts.setOptions(Highcharts.theme);
var options = {
chart: {
renderTo: 'graph',
type: 'line',
marginRight: 130,
marginBottom: 25,
reflow: false,
borderWidth: 0
},
title: {
text: 'Data',
x: -20 //center
},
xAxis: {
type:'datetime',
dateTimeLabelFormats: {
year: '%b \'%y'
}
},
yAxis: {
title: {
text: 'This is a text !'
},
plotLines: [{
value: 0,
width: 1,
color: '#808080'
}]
},
tooltip: {
formatter: function() {
return '<b>'+ this.series.name +'</b><br/>'+
Highcharts.dateFormat ('%A, %b %e, %Y', this.point.x) +': '+ this.y;
}
},
legend: {
layout: 'vertical',
align: 'right',
verticalAlign: 'top',
x: -10,
y: 100,
borderWidth: 0
},
plotOptions: {
series: {
marker: {
enabled: false,
states: {
hover: {
enabled: true,
radius: 3
}
}
}
}
},
series: [{
name: ''
}, {
name: ''
}]
}
$.ajax({
url: url_base+"show_page/graph_data.do",
type: 'POST',
data: 'symbol='+symbol_1+"&price="+price_1+"&period="+period_1+"&bars="+bars_1+"&constraints="+constraints_1,
cache: false,
dataType: "json",
success: function(html) {
var data_array = [];
var data_1 = [];
var data_2 = [];
var i = 0;
var time_x_axis = [];
var sLegend = [];
try{
data_array = html;
sLegend = price_1.split(',');
if(html == null){
alert('No data was found. Try it again ');
}else{
for(i=0;i<data_array.length;i++)
{
time_x_axis[i] = data_array[i]['time'];
data_1[i] = '['+Date.UTC(time_x_axis[i].substr(0, 4), time_x_axis[i].substr(5,2), time_x_axis[i].substr(8,2), time_x_axis[i].substr(11,2), time_x_axis[i].substr(14,2), time_x_axis[i].substr(17,2))+','+parseFloat(data_array[i]['value_1'])+']';
data_2[i] = '['+Date.UTC(time_x_axis[i].substr(0, 4), time_x_axis[i].substr(5,2), time_x_axis[i].substr(8,2), time_x_axis[i].substr(11,2), time_x_axis[i].substr(14,2), time_x_axis[i].substr(17,2))+','+parseFloat(data_array[i]['value_2'])+']';
}
}
}catch(e){ }
options.series[0].data = '['+data_1+']';
options.series[0].name = sLegend[1];
options.series[1].data = data_2;
options.series[1].name = sLegend[2];
chart = new Highcharts.Chart(options);
}
});}
这里我得到html变量的结果并将它们影响到Data_array []。
因为系列数据应采用 Data:[[],[],[] .. []] 的格式,这就是我把* options.series [0] .data ='[ '+ data_1 +']'; *。
对于* data_1 [i] *,我必须减去获得年,月,日,小时,分钟和秒的时间。
我在代码中缺少什么?
答案 0 :(得分:0)
您可以尝试以下更改吗?
制作data_1 [i]&amp; data_2 [i]使用[...,...]
代替'[' + ... + ',' + ... + ']'
作为数组(这实际上导致字符串而不是数组)
data_1[i] = [parseInt(Date.UTC(time_x_axis[i].substr(0, 4), time_x_axis[i].substr(5,2), time_x_axis[i].substr(8,2), time_x_axis[i].substr(11,2), time_x_axis[i].substr(14,2), time_x_axis[i].substr(17,2))),parseFloat(data_array[i]['value_1'])];
data_2[i] = [parseInt(Date.UTC(time_x_axis[i].substr(0, 4), time_x_axis[i].substr(5,2), time_x_axis[i].substr(8,2), time_x_axis[i].substr(11,2), time_x_axis[i].substr(14,2), time_x_axis[i].substr(17,2))),parseFloat(data_array[i]['value_2'])];
和
从系列数据中删除'[' + ... + ']'
,因为data_1已经是数组数组,您不需要使用任何连接添加方括号。无论如何,你的方法会因为连接而再次产生字符串。
options.series[0].data = data_1;