chart = {
const svg = d3.select(DOM.svg(width, height));
svg.append("g")
.call(xAxis);
svg.append("g")
.attr("transform", `translate(${margin.left}, 0)`)
.selectAll("rect")
.data(d3.range(7).filter((_, ix) => ix % 2 === 0))
.enter()
.append('rect')
.attr('y', 0)
.attr("x", n => n * x_.bandwidth())
.attr('width', x_.bandwidth())
.attr('height', height - margin.bottom)
.attr("fill", "#cdf2");
svg.append("g")
.attr("transform", `translate(${margin.left}, 0)`)
.selectAll("rect")
.data(d3.range(8))
.enter()
.append('line')
.attr("y1", 0)
.attr("y2", height - margin.bottom)
.attr("x1", n => n * x_.bandwidth())
.attr("x2", n => n * x_.bandwidth())
.attr("stroke", "#0003")
.attr("stroke-dasharray", "4 4")
svg.append("g")
.selectAll("circle")
.data(dodge(data, radius * 2 + padding))
.enter().append("circle")
.attr("cx", d => d.x)
.attr("cy", d => height / 2 + d.y)
.attr("r", radius)
.append("title")
.text(d => d.data.name);
return svg.node();
}