如何将数字缩放到具有范围和域的日期?例如,我希望在两个任意日期之间的某个时刻将数字缩放为日期。
我试过这个:
var min = new Date(2009, 1, 1);
var max = new Date(2012, 2, 2);
var xScale = d3.time.scale().domain([0,100]).range([min,max]);
console.log(xScale(10));
结果是Object {}
,我也尝试过线性刻度。
答案 0 :(得分:2)
在d3.time.scale()
中,域应该是一个日期数组(因为它们位于数据的“域”中),范围是数字。你正试图反过来,这是不支持的。你需要:
xScale = d3.time.scale().domain([min,max]).range([0,100]);
然后xScale(date)
将日期转换为数字(例如像素位置)。
由于你想要反过来,所以你需要:
xScale.invert(10) // returns Date
拉斯指出,可以用线性刻度(而不是时间刻度)来做到这一点。它看起来像这样:
linearScale = new d3.scale.linear()
.domain([0,100])
.range([Number(min), Number(max)]);
您必须将min
和max
投射到数字中才能生效。然后你可以用数字计算日期:
new Date( linearScale(10) )