【问题标题】:Remove hours from time series从时间序列中删除小时
【发布时间】:2013-08-21 21:20:13
【问题描述】:

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

【问题讨论】:

    标签: javascript dygraphs


    【解决方案1】:

    你的问题不是你有两点,而是你的点涵盖了一定的时间。 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 [];
              }
            }        
          }
    
        }
    });
    

    【讨论】:

    • axisLabelFormatter 在称为 Dygraph.dateAxisFormatter(d,Dygraph.DAILY) 时似乎禁用了小时,但仍然填充了太多中间代码...
    • 目前不清楚你的问题是什么,取决于你想要什么。您在问题中编辑的代码示例将强制粒度为 DAILY,但前提是内置计算确定 SIX_HOURLY 是理想的。根据您的数据,这可能就足够了,或者您可能想强制每天进行。无论如何,我建议在您的代码中使用 Dygraph.SIX_HOURLY & Dygraph.DAILY 而不是 12 和 13 以使其更具可读性。
    • 我编辑了我的答案(和 jsfiddle)以使用ticker显示示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 2019-10-19
    相关资源
    最近更新 更多