Javascript 从时间序列中删除小时数
动态图允许轻松显示时间序列 但是,如果我的数据只包含两个数据点,它会自动用小时填充X轴上的间隙。是否可以禁用此功能?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") 更新-这似乎
我搜索并尝试了许多选项,但没有找到任何有用的 示例可能是图库中的“时间序列绘图演示”-如果只在几个数据点上执行,它将以小时填补“空白” 这是一个很好的例子:
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 [];
}
}
}
}
});