chart = {
const svg = d3.create("svg").attr("viewBox", [0, 0, width, height]);
for (
var smallMultiple = 0;
smallMultiple < multiples * multiples;
smallMultiple++
) {
var smGroup = svg.append("g").attr(
"transform",
`translate(
${((smallMultiple % multiples) * width) / multiples},
-${(Math.floor(smallMultiple / multiples) * height) / multiples}
)`
);
smGroup
.selectAll("circle")
.data([5])
.join("circle")
.attr("transform", d => `translate(${x(d)},${y(d * 2)})`)
.attr("fill", d3.schemePastel2[Math.floor(d3.randomUniform(0, 8)())])
.attr("fill-opacity", 0.66)
.attr("stroke-width", 0)
.attr('cx', d3.randomUniform(0.6, 2)() * 30)
.attr('cy', d3.randomUniform(1, 2)() * 20)
.attr('r', d3.randomUniform(0.6, 3)() * 20);
smGroup
.attr("fill", "none")
.attr("stroke", "black")
.attr("stroke-width", 2)
.selectAll("path")
.data([5])
.join("path")
.attr("transform", d => `translate(${x(d)},${y(d * 2)})`)
.attr("d", d => curve(width / multiples / 4, 50));
}
return svg.node();
}