使用Date()对象数组创建X轴 - D3.js

时间:2016-08-22 22:11:50

标签: javascript d3.js

我在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])有效,但包括周末和假日。

1 个答案:

答案 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的这个实现,它在工作日的数字和日期之间进行转换(我从未尝试过):

https://gist.github.com/mbostock/5827353