我正在尝试创建一个折线图,其中包括沿x轴的日期。我的图看起来像这样。
数据数组如下所示:[[1376092800000,1],[1379376000000,2],[1380585600000,3],[1383350400000,4],[1383350400000,5],[1383350400000,6],[1383350400000,7],[1383350400000,8],[1385942400000,9],[1385942400000,10],[1385942400000,11],[1385942400000,12],[1388620800000,13],[1388620800000,14],[1388620800000,15],[1388620800000,16],[1391212800000,17],[1393632000000,18],[1401580800000,19],[1401580800000,20],[1401580800000,21],[1404172800000,22],[1404172800000,23]]
数组中的第一个值应该在(August 2013,1)处绘制一个点;但是,它是在1月1日绘制第一个点。我想将我的数据与数组中的值进行匹配。我也希望x轴显示月份后跟年份。我尝试添加
labels: {
formatter: function () {
return Highcharts.dateFormat('%m %y', this.value);
}
}
但这只是将x轴更改为
任何建议将不胜感激。谢谢!
编辑
我认为问题与我访问数据的方式有关。我正在调用具有日期值的XML文件。这是工作图的jsfiddle,但数据是硬编码的。我想要一种将数据传递到页面的方法。
我的密码
//Open the XML file
xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "https://atlanticresearchgroupinc.quickbase.com/db/bi6vng8r5?a=API_DoQuery&clist=a", false);
xmlhttp.send();
xmlDoc = xmlhttp.responseXML;
var record = xmlDoc.getElementsByTagName("record");
var x = 0;
var y = 0;
var dataset = [];
//Create dataset
for (var i = 0; i < record.length; i++) {
x = record[i].getElementsByTagName("date_of_consent")[0].childNodes[0].nodeValue;
y = y + 1;
var newArray = [x, y];
dataset.push(newArray);
}
$(function () {
$('#container').highcharts({
chart: {
type: 'spline'
},
title: {
text: 'Enrollment Over Time',
x: -20 //center
},
xAxis: {
title: {
text: 'Date of Enrollment'
},
type: 'datetime'
},
yAxis: {
title: {
text: 'Number of Patients'
},
min: 0,
plotLines: [{
value: 0,
width: 1,
color: '#808080'
}]
},
tooltip: {
headerFormat: '<b>{series.name}</b><br>',
pointFormat: '{point.x:%e. %b}: {point.y:.2f} Patients'
},
legend: {
layout: 'vertical',
align: 'right',
verticalAlign: 'middle',
borderWidth: 0
},
series: [{
name: 'Actual Enrollment',
data: dataset
}]
});
});
最佳答案
查看示例数据数组是正确的,如this JSFiddle中的示例所示。
问题(您可能已经发现)是从XML获取它略有不同。在您的代码中,您的for
循环中包含以下行:
x = record[i].getElementsByTagName("date_of_consent")[0].childNodes[0].nodeValue;
这里的问题是JavaScript(和Highcharts)不知道您打算将其作为整数。它以字符串形式获取。并且在Highcharts中无法将字符串作为时间戳插入数据数组中。
您将必须将此
x
值解析为整数,然后将其推入数组,例如:x = parseInt(record[i].getElementsByTagName("date_of_consent")[0].childNodes[0].nodeValue);
这应该使Highcharts将其视为时间戳,并在x轴上显示正确的日期。当它得到字符串时,它只是将数据视为具有从0、1、2 ...递增的x值。
希望这能解决您的问题。