删除时间序列中的小时数

时间:2013-08-20 15:20:11

标签: javascript dygraphs

Dygraphs可以轻松显示时间序列......

但是,如果我的数据只包含两个数据点,它会自动用X小时填充X轴的间隙。是否可以禁用此功能?
我搜索并尝试了很多选项,但没有找到任何有用的东西。

示例可能是'时间序列绘图演示'来自画廊 - 如果仅在少数数据点上执行,则填补了“差距”。有几个小时。

这是一个很好的例子:

g = new Dygraph(document.getElementById('plot'),"a,b\n2008-12-01,0.9\n2008-12-02,0.3\n2008-12-03,0.7\n")

更新 - 这似乎有效:

ticker: function(a, b, pixels, opts, dygraph, vals) {
  var chosen = Dygraph.pickDateTickGranularity(a, b, pixels, opts);
  if(chosen==12) chosen=13;
  if (chosen >= 0) {
    return Dygraph.getDateAxis(a, b, chosen, opts, dygraph);
  } else {
    // this can happen if self.width_ is zero.
    return [];
  }
};

1 个答案:

答案 0 :(得分:0)

你的问题不在于你有两点,而是你的积分需要一定的时间。 Dygraphs尝试计算给定数据集中x轴刻度线的最佳粒度。

修改默认计算的一种方法是使用pixelsPerLabel选项。

示例:http://jsfiddle.net/kaliatech/P8ehg/

var data = "a,b\n2008-12-01,0.9\n2008-12-02,0.3\n2008-12-03,0.7\n";
g = new Dygraph(document.getElementById("plot"), data, {
  axes: {
    x: {
        pixelsPerLabel: 100
      }
    }
});

这需要对像素宽度进行硬编码,但最终还是依赖于您正在绘制的数据集。更灵活的方法可能是使用ticker选项,允许您提供自己的函数来计算标签粒度。请参阅dygraph-tickers.js的文档和内置函数。

另见:


编辑:使用自动收报机的示例。这要求您熟悉数据并且数据范围有些不变,否则您最终会得到不可读的x轴标签。

var g = new Dygraph(document.getElementById("demodiv3"), data(), {
  title: 'Example for changing x-axis label granularity 3',
  axes: {
    x: {
        ticker: function(a, b, pixels, opts, dygraph, vals) {
          var chosen = Dygraph.pickDateTickGranularity(a, b, pixels, opts);
          //Force to DAILY if built-in calculation returned SIX_HOURLY
            //if(chosen==Dygraph.SIX_HOURLY)
            //    chosen=Dygraph.DAILY;
          //or

          //Force to DAILY always
          chosen = Dygraph.DAILY;

          if (chosen >= 0) {
            return Dygraph.getDateAxis(a, b, chosen, opts, dygraph);
          } else {
            return [];
          }
        }        
      }

    }
});