我正在使用flot (flot on github)绘制一个包含以下时间序列数据的图:
[
[1357171200000, 1],
[1357344000000, 1],
[1357430400000, 2],
[1357516800000, 2],
[1357689600000, 3],
[1357776000000, 1]
]正如您所看到的,图中的一些点显示了给定日期的销售情况。我的json响应不包含未发生销售的日期的销售计数/数据。例如,一月的04号。如何配置flot以在y轴上的零点处绘制缺失的天数(因为没有销售)?正如您在图像中看到的,flot确实连接了这些点,因此在图形中没有零点。

发布于 2013-01-26 06:38:48
下面是一个解决方案,它创建一个新的Array,添加缺少的天数,并将它们的值设置为零:
/* create and return new array padding missing days*/
function newDataArray(data) {
var startDay = data[0][0],
newData = [data[0]];
for (i = 1; i < data.length; i++) {
var diff = dateDiff(data[i - 1][0], data[i][0]);
var startDate = new Date(data[i - 1][0]);
if (diff > 1) {
for (j = 0; j < diff - 1; j++) {
var fillDate = new Date(startDate).setDate(startDate.getDate() + (j + 1));
newData.push([fillDate, 0]);
}
}
newData.push(data[i]);
}
return newData;
}
/* helper function to find date differences*/
function dateDiff(d1, d2) {
return Math.floor((d2 - d1) / (1000 * 60 * 60 * 24));
}要使用以下命令:
var data = [
[1357171200000, 1],
[1357344000000, 1],
[1357430400000, 2],
[1357516800000, 2],
[1357689600000, 3],
[1357776000000, 1]
];
var newData=newDataArray(data);
/* pass newData to flot*/演示:http://jsfiddle.net/LK2gD/3/
发布于 2013-01-25 21:42:13
所以,你有每天的计数。然后,您可以迭代每个条目,并找到当前条目和下一个条目之间的天数,然后只需用0填充数组即可。
最好使用一个填零的数组,然后只添加当前数组中日期的计数,这样就不需要对日期进行任何检查。
你每天的时间间隔
var millisInDay = 1000*60*60*24;这将为您提供每日间隔的数量
var intervals = parseInt(((lastDateInMillis - startDateInMillis)/
millisInDay) + 1);然后,当您遍历日期数组时
[[1357171200000, 1], [1357344000000, 1], [1357430400000, 2],
[1357516800000, 2], [1357689600000, 3], [1357776000000, 1]]检查哪个时间间隔是日期,并更新' interval‘数组中的计数(counts)
var interval = ((currentDateMillis - startDateInMillis) / millisInDay);
counts[interval] += currentCount; 然后,您可以使用index将计数映射到特定日期:
function getEpochStartInterval(index){
return startDateInMillis + (index * millisInDay);
}
function getEpochEndInterval(index){
return startDateInMillis + ((index + 1) * millisInDay);
}https://stackoverflow.com/questions/14522667
复制相似问题