solution41 = {
const svg = d3.create("svg").attr("viewBox", [0, 0, width, height]);
svg.append("g")
.selectAll("circle")
.data(data)
.join("circle")
.attr("cx", d => x(d[0]))
.attr("cy", d => y(d[1]))
.attr("r", 5)
.attr("fill", "#000000");
svg.append("g")
.call(d3.axisBottom(x).tickSize(height - 2 * margin))
.attr("transform", `translate(0, ${margin})`)
.call(g => g.select(".domain").remove())
.call(g => g.select(".tick:first-of-type text").remove())
.call(g => g.selectAll(".tick:not(:first-of-type) line")
.attr("stroke-opacity", 0.4)
.attr("stroke-dasharray", "2,2"));
svg.append("g")
.call(d3.axisLeft(y).tickSize(width - 2 * margin))
.attr("transform", `translate(${width - margin}, 0)`)
.call(g => g.select(".domain").remove())
.call(g => g.select(".tick:first-of-type text").remove())
.call(g => g.selectAll(".tick:not(:first-of-type) line")
.attr("stroke-opacity", 0.4)
.attr("stroke-dasharray", "2,2"));
return svg.node();
}