grid = g => g
.attr("stroke", "currentColor")
.attr("stroke-opacity", 0.1)
.call(g => g.append("g")
.selectAll("line")
.data(xScale.ticks())
.join("line")
.attr("x1", d => 0.5 + xScale(d))
.attr("x2", d => 0.5 + xScale(d))
.attr("y1", margin.top)
.attr("y2", height - margin.bottom))
.call(g => g.append("g")
.selectAll("line")
.data(yScale.ticks())
.join("line")
.attr("y1", d => 0.5 + yScale(d))
.attr("y2", d => 0.5 + yScale(d))
.attr("x1", margin.left)
.attr("x2", width - margin.right));