chart = {
const svg = d3.select(DOM.svg(width, height));
const g = svg
.attr('width', width - margin.left)
.attr('height', height + margin.top + margin.bottom)
.append('g')
.attr('transform', 'translate(' + margin.left + ', 0)');
g.append('g')
.attr('transform', 'translate(0,' + height + ')')
.call(d3.axisBottom(x_scale));
g.append('g').call(d3.axisLeft(y_scale));
svg
.selectAll()
.data(data)
.enter()
.append('rect')
.attr('x', d => x_scale(d.x) + margin.left + 3)
.attr('y', d => y_scale(d.y) + 3)
.attr('width', x_scale.bandwidth() - 10)
.attr('height', y_scale.bandwidth() - 3)
.attr('fill', d => color_scale(d.value));
return svg.node();
}