我正在生成一个图表,显示一组文档的发布日期。
这些日期可以在几天、几个月和几年之间非常大。
values = [Mon Jan 01 2001 00:00:00 GMT+0000 (GMT Standard Time), Tue Jan 02 2001 00:00:00 GMT+0000 (GMT Standard Time), ... , Thu Jan 09 2003 00:00:00 GMT+0000 (GMT Standard Time)]
所以我使用“d3.layout.histogram”将文档日期分组到 10 个(或尽可能接近的)箱中。
var x = d3.time.scale().domain([firstDate, lastDate]).range([0, width]);
var data = d3.layout.histogram()
.bins(x.ticks(bins))
(values);
var formatDate = d3.time.format("%d/%m/%y");
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom")
.tickFormat(formatDate);
然后,以固定的 10px(图中的 A)宽度绘制矩形条,如下所示:
bar.append("rect")
.attr("x", 0)
.attr("width", function(d) {
rtnW = 10;
return rtnW;
})
.attr("height", function(d) { return height - y(d.y); });
如果我尝试动态设置宽度,只要刻度在轴上均匀定位就可以了:
.attr("width", (width/(x.ticks(bins).length-1))-1)
但是,如果刻度不完全适合,那么您会在轴的前端和末端(图中!)获得备用比例,这会导致列宽计算失败。
所以问题是:
如何计算/获取 xAxis 上每个刻度之间的实际宽度(图中的 B)?(如果我可以取回第 1 和第 2 点的日期,我可能也可以解决。axis.tickValues 可以帮助解决这个问题吗??)。
非常感谢!