chart = {
const svg = d3.create("svg")
.attr("viewBox", [0, 0, width, height])
.attr("font-family", "sans-serif")
.attr("font-size", 10);
svg.append("g")
.selectAll("rect")
.data(data)
.join("rect")
.attr("fill", d => d3.schemeSet1[d.sex === "M" ? 1 : 0])
.attr("x", d => d.sex === "M" ? xM(d.value) : xF(0))
.attr("y", d => y(d.age))
.attr("width", d => d.sex === "M" ? xM(0) - xM(d.value) : xF(d.value) - xF(0))
.attr("height", y.bandwidth());
svg.append("g")
.attr("fill", "white")
.selectAll("text")
.data(data)
.join("text")
.attr("text-anchor", d => d.sex === "M" ? "start" : "end")
.attr("x", d => d.sex === "M" ? xM(d.value) + 4 : xF(d.value) - 4)
.attr("y", d => y(d.age) + y.bandwidth() / 2)
.attr("dy", "0.35em")
.text(d => d.value.toLocaleString());
svg.append("text")
.attr("text-anchor", "end")
.attr("fill", "white")
.attr("dy", "0.35em")
.attr("x", xM(0) - 4)
.attr("y", y(data[0].age) + y.bandwidth() / 2)
.text("Male");
svg.append("text")
.attr("text-anchor", "start")
.attr("fill", "white")
.attr("dy", "0.35em")
.attr("x", xF(0) + 24)
.attr("y", y(data[0].age) + y.bandwidth() / 2)
.text("Female");
svg.append("g")
.call(xAxis);
svg.append("g")
.call(yAxis);
return svg.node();
}