Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从时间序列中删除小时数_Javascript_Dygraphs - Fatal编程技术网

Javascript 从时间序列中删除小时数

Javascript 从时间序列中删除小时数,javascript,dygraphs,Javascript,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") 更新-这似乎

动态图允许轻松显示时间序列

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

你的问题不是你有两点,而是你的观点涵盖了一定的时间。动态图试图计算给定数据集中x轴记号的最佳粒度

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

例如:

这需要硬编码一个像素宽度,但最终还是取决于您正在绘制的数据集。更灵活的方法可能是使用该选项,允许您提供自己的函数来计算标签粒度。请参阅的文档和内置功能

另见:


编辑:使用ticker的示例。这要求您熟悉数据,并且数据范围有些恒定,否则最终可能会出现无法读取的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)时似乎禁用了小时数,但仍然填充了太多的中间代码…目前还不清楚您的问题是什么,这取决于您想要什么。您在问题中编辑的ticker示例将强制粒度为DAILY,但只有在内置计算确定每小时6_是理想的情况下。取决于你的数据,也许这就足够了,或者你想强迫自己每天都去做。无论如何,我建议在代码中使用Dygraph.SIX_HOURLY&Dygraph.DAILY,而不是12和13,以提高可读性。
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 [];
          }
        }        
      }

    }
});