我在javascript中有一系列日期:
dates = [Fri Jan 02 2015 00:00:00 GMT-0600 (CST),
Mon Jan 05 2015 00:00:00 GMT-0600 (CST),
Tue Jan 06 2015 00:00:00 GMT-0600 (CST),
Wed Jan 07 2015 00:00:00 GMT-0600 (CST),
Thu Jan 08 2015 00:00:00 GMT-0600 (CST),
Fri Jan 09 2015 00:00:00 GMT-0600 (CST), …]
还有更多日期。我可以根据需要解析它们 - 在D3.js中或者以Date()
格式保存它们。我希望我的时间刻度x轴只有这些日期的刻度(注意它们跳过周末和假期)。这有可能在D3?我目前试过
timeScale = d3.time.scale()
.domain(dates)
.range([0, width])
.clamp(true);
但这不起作用。使用.domain([minDate, maxDate])
有效,但包括周末和假日。
答案 0 :(得分:1)
简短的回答似乎是"没有",这是不可能的,因为d3.time.scale()
并没有考虑到这一点。
根据博斯托克(d3的创造者):
当您希望将时间显示为连续的定量变量时,应使用d3.time.scale,例如当您想要考虑由于夏令时变化导致天数为23-25小时这一事实时由于闰年,年数可能在365-366天之间。 如果你不想绘制连续时间和普通日历单元中的所有不规则,那么你可能不想使用d3.time.scale,而是想要一个d3.scale.linear。
因此,在您的情况下,更好的方法是创建一个线性比例,并像这样映射你的日子:
Fri Jan 02 --> 1
Mon Jan 05 --> 2
Tue Jan 06 --> 3
Wed Jan 07 --> 4
Etc...
另外,你可能想看看Bostock的这个实现,它在工作日的数字和日期之间进行转换(我从未尝试过):