2013-08-20 31 views
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 []; 
    } 
}; 

回答

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的文档和内置功能。

参见:使用实施例股票:


EDIT。这要求您熟悉数据并且数据范围有点不变,否则可能会导致无法读取的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 []; 
      } 
     }   
     } 

    } 
}); 
+0

axisLabelFormatter似乎在被称为Dygraph.dateAxisFormatter(d,Dygraph.DAILY)禁用小时,但仍充满太多的中间行情... – Mercier

+0

请查看更新的问题 - 最简单的,但工作? – Mercier

+0

不清楚你的问题在这一点上,并取决于你想要什么。您在问题中编辑的股票样本将强制每个粒度,但只有当内置计算确定SIX_HOURLY是理想的时候。根据你的数据,也许这已经足够了,或者你可以改为强制DAILY。在任何情况下,我都会建议在代码中使用Dygraph.SIX_HOURLY&Dygraph.DAILY而不是12和13,以使其更具可读性。 – kaliatech