databind = function(data) {
let colourScale = d3.scaleSequential(d3.interpolateSpectral).domain(d3.extent(data, d => d.value));
var join = svg.selectAll('.rect').data(data);
console.log(join);
var enterSel = join.enter()
.append('rect')
.attr('class', 'rect')
.attr("x", (d, i) => {
console.log("x");
var x0 = Math.floor(i / 100) % 10;
var x1 = Math.floor(i % 10);
return layout.groupSpacing * x0 + (layout.cellSpacing + layout.cellSize) * (x1 + x0 * 10);
})
.attr("y", (d, i) => {
var y0 = Math.floor(i / 1000);
var y1 = Math.floor(i % 100 / 10);
return layout.groupSpacing * y0 + (layout.cellSpacing + layout.cellSize) * (y1 + y0 * 10);
})
.attr('width', 0)
.attr('height', 0);
join
.merge(enterSel)
.transition(500)
.attr('width', layout.cellSize)
.attr('height',layout.cellSize)
.attr('fill', (d) => colourScale(d.value) );
var exitSel = join.exit()
.transition(500)
.attr('width', 0)
.attr('height', 0)
.remove();
}