在使用D3.js开发显示各种指标数据的网站期间,我遇到了一个我无法解释的奇怪错误。
如何重新创建问题
x轴应涵盖1990-2013的年份范围。我和我的同事在欧洲进行的所有测试都是如此(测试国家是比利时,爱沙尼亚和德国),见下图。
然而,对于美国(可能还有加拿大)的任何人来说,x轴显示的是1989-2012的范围,请参见下面的截图(请注意,由于最近仅作为新功能添加了红线,因此缺少红线)
在内部,数据来自上传的CSV文件,这些文件被解析为JSON,然后在D3.js中使用。对于日期比例,所有年份值都会扩展为使用类似
的完整日期dateValue = year + '-01-01';
包含数据的javascript对象还会显示所有用户(即使在美国)的正确年份,但显示屏会关闭一年。
这怎么可能?我想过时区,但我没有时间,只是约会。 我甚至试图将日期设置为6月1日而不是1月,以确保但仍然是相同的行为。
任何人都可以指出我想要寻找的方向,我被困在了如何找出错误来源的想法。
关于Mark关于该功能的评论的更新
// Determine year range.
var yearTicks = [];
for (var y = obj.chartYMin; y <= obj.chartYMax; y++) {
yearTicks.push(new Date(y + "-01-01"));
}
// Set x scale function
var x = d3.time.scale()
.domain([new Date((obj.chartYMin - 1) + "-01-01"),
d3.time.day.offset(new Date((obj.chartYMax + 1) + "-01-01"), 1)])
.rangeRound([0, obj.width]);
// Create x axis
var xAxis = d3.svg.axis().scale(x)
.tickSize(-obj.height)
.tickSubdivide(true)
.tickValues(yearTicks)
.tickFormat(d3.time.format("%Y"));
// Update x axis in graph.
d3.select("#scoreboard-" + obj.chartType + "-canvas .x.axis").call(xAxis);
obj.chartYMin和obj.chartYMax是所提供数据中的最小和最大年份值,yearTicks是数据中存在的所有年份的数组。