D3.js 如何使用范围和域将整数缩放到最新值

D3.js 如何使用范围和域将整数缩放到最新值,d3.js,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{},我也尝试过使用线性刻度。在d3.time.scale()中,域应

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

我试过这个:

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

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) )

这还不清楚。你能举个例子吗?用数字定义域,用
Date
s定义范围。@larskothoff这就是我所做的,但缩放结果是一个空对象。嗯。输入号码也在域内。