javascript - 如何配置 flot 以在零点的 y 轴上绘制缺失的时间序列?

标签 javascript jquery graph time-series flot

我正在使用 flot ( flot on github ) 绘制包含以下时间序列数据的图表:

[
    [1357171200000, 1],
    [1357344000000, 1],
    [1357430400000, 2],
    [1357516800000, 2],
    [1357689600000, 3],
    [1357776000000, 1]
]

如您所见,图表中有一些点显示了给定日期的销售额。 我的 json 响应不包含未发生销售的日子的销售计数/数据。 例如 1 月 4 日。我如何配置 flot 以在 y 轴上的零点处绘制缺失的天数(因为没有销售)?正如您在图像中看到的那样,flot 确实连接了点,因此图中没有零点。

Graph

最佳答案

这是一个创建新数组的解决方案,添加缺失的日期并将其值设置为零:

/* 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/

关于javascript - 如何配置 flot 以在零点的 y 轴上绘制缺失的时间序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14522667/

相关文章:

Canvas 上的 Javascript SVG 绘图在事件阶段 2 失败

javascript - 显示加载图标,直到表格加载完毕

jquery - 在多个 DIV 中使用 jquery 显示/隐藏内容

jquery - Javascript,第一次点击没有动画

algorithm - 检查给定网络流中是否存在单个最小割

graph - 密码:如何返回不同的关系类型?

algorithm - 到所有节点的非循环路径

javascript - jQuery 和 Ajax 加载时的奇怪变量值

javascript - Cesiumjs 缩放到鼠标

javascript - 如何从meteorjs 访问osTicket api?