如何在d3中为日期时间刻度设置适当的域

时间:2014-08-13 10:53:10

标签: javascript datetime d3.js

尝试使用以下数据构建散点图:

[
{"frequency": 10, "date": "2014-01-01"},
{"frequency": 20, "date": "2014-01-02"},
{"frequency": 30, "date": "2014-01-03"}
]

我正在密谋"日期"在x轴上和y轴上的频率。我正在使用" d3.time.scale"在x轴上。问题是尺度和刻度从原点开始在x轴上,因此我得到的图从y轴开始。

为了解决这个问题,我尝试在前一天和后一天添加,即" 2013-12-31" &安培; " 2014年1月4日"到x轴域(使用" d3.time.day.offset"函数)。

如果给定的时间序列以天为间隔,则上述代码有效。如果我的数据是这样的月间隔:

 [
{"frequency": 10, "date": "2014-01-01"},
{"frequency": 20, "date": "2014-02-02"},
{"frequency": 30, "date": "2014-03-03"}
]

以上代码无效。我必须使用" d3.time.month.offset"功能而不是。

有没有办法知道给定时间序列的间隔时间并使用适当的偏移量。 (即" d3.time.month.offset"," d3.time.year.offset"," d3.time.day.offset"等)

由于

2 个答案:

答案 0 :(得分:0)

我有类似的问题,但我认为这可能有用:http://jsfiddle.net/robdodson/KWRxW/

var x = d3.time.scale() .domain([new Date(data[0].date), d3.time.day.offset(new Date(data[data.length - 1].date), 1)]) .rangeRound([0, width - margin.left - margin.right]);

此外,Mike在此处列举日期/时间偏移:https://github.com/mbostock/d3/wiki/Time-Intervals

:)

答案 1 :(得分:0)

以下是跨浏览器解决方案:

var timeFormat = d3.time.format('%Y-%m-%dT%H:%M:%S');

当用于设置比例域时,将返回跨浏览器一致的Date对象:

.domain([timeFormat.parse('2014-03-08T12:00:00'), timeFormat.parse('2014-03-10T00:00:00')])

有关详细信息,请参阅http://bl.ocks.org/jebeck/9671241