0

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

但是,如果我的数据仅包含两个数据点,它会自动以小时填充 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 [];
  }
};
4

1 回答 1

0

你的问题不是你有两点,而是你的点涵盖了一定的时间。Dygraphs 尝试计算给定数据集中 x 轴刻度线的最佳粒度。

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

示例: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 [];
          }
        }        
      }

    }
});
于 2013-08-20T15:55:45.077 回答