我正在学习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));
我尝试过各种各样的东西,但都没有。有人能指出我正确的方向。
答案 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。