当然,您可以使用二维数组的索引来绘制热图。我在http://jsfiddle.net/uArga/4/上整理了一个简单的例子。
假设您的数据如下所示:
var data = [[3,5],[9,2]];
首先,我设置了一些基本的尺度来根据数据的大小和图表的大小来计算偏移量x。y这使得通过更改图表来调整图表大小变得很容易,height并且width无需手动重新计算每个单元格的大小。
var x = d3.scale.linear()
.range([0, width])
.domain([0,data[0].length]);
var y = d3.scale.linear()
.range([0, height])
.domain([0,data.length]);
然后,您可以将每一行添加到热图中
var row = svg.selectAll(".row")
.data(data)
.enter().append("svg:g")
.attr("class", "row");
然后使用子选择将每个单元格添加到行中。可能有一种更简洁的方法可以做到这一点,但我基本上只是在每个单元格的数据旁边捕获行号。然后,我使用刻度来计算每个单元格的x、y、height和width。
var col = row.selectAll(".cell")
.data(function (d,i) {return d.map(function(a){return {value: a, row: i};})})
.enter().append("svg:rect")
.attr("class", "cell")
.attr("x", function(d, i) { return x(i); })
.attr("y", function(d, i) { return y(d.row); })
.attr("width", x(1))
.attr("height", y(1))
.style("fill", function(d) { return colorScale(d.value); });