创建过去365天的日历网格

时间:2013-12-11 13:51:31

标签: javascript date d3.js calendar

我正在学习d3.js,我想创建一个类似于github公共贡献图表的日历视图。

我使用此d3.js calendar view作为我的起点。

我遇到的问题是尝试在过去365天内创建一个网格。我创造了一个小提琴:http://jsfiddle.net/fcR4Q/1/我被困在哪里。目前它只创造了一年365个盒子。

我想我需要改变以下几行:

var svg = d3.select(".sales").selectAll("svg")
    .data(d3.range(2012, 2013))

...

return d3.time.days(new Date(d, 0, 1), new Date(d + 1, 0, 1));

我尝试过各种各样的东西,但都没有。有人能指出我正确的方向。

1 个答案:

答案 0 :(得分:3)

首先,您在设置上一年的年份时修改原始年份(today)。您的代码应如下所示:

var today = new Date(),
lastyear = new Date();
lastyear.setFullYear(lastyear.getFullYear() - 1);

您实际上不再需要嵌套选择,因为您只有一年。所以对于SVG,你只需要做

var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height)
.attr("class", "RdYlGn")
.append("g")
.attr("transform",
      "translate(" + ((width - cellSize * 53) / 2) + "," + (height - cellSize * 7 - 1) + ")");

最后,为了计算细胞的位置,不再是日/周是重要的(因为你想要连续的细胞日),但索引:

.attr("x", function(d, i) { return Math.floor(i / 7) * cellSize; })
.attr("y", function(d, i) { return i % 7 * cellSize; })

完成jsfiddle here