如何使用范围和域将整数缩放到日期

时间:2013-12-29 16:26:14

标签: d3.js

如何将数字缩放到具有范围和域的日期?例如,我希望在两个任意日期之间的某个时刻将数字缩放为日期。

我试过这个:

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 {},我也尝试过线性刻度。

1 个答案:

答案 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)]);

您必须将minmax投射到数字中才能生效。然后你可以用数字计算日期:

new Date( linearScale(10) )