canvasChart = {
const context = DOM.context2d(width, height);
let text = "";
const centerX = width / 2;
const centerY = height / 2;
const spaceBetweenBubbles = 3;
colorScale.range(colors);
let radiusScale = (d) => {
return dalyScale(d.daly);
};
let xScale = (d) => {
return xScale_stage_1(d);
};
const simulation = d3
.forceSimulation(data_for_chart)
.alphaTarget(0.5)
.velocityDecay(0.8)
.force("charge", d3.forceManyBody().strength(-width / 100))
.force("x", d3.forceX().strength(0.1))
.force("y", d3.forceY().strength(0.1))
.force("center", d3.forceCenter(width / 2, height / 2))
.force(
"collide",
d3
.forceCollide()
.radius((d) => radiusScale(d) + spaceBetweenBubbles)
.iterations(100)
)
.on("tick", ticked);
invalidation.then(() => simulation.stop());
function ticked() {
context.clearRect(0, 0, width, height);
context.textAlign = "center";
context.textBaseline = "middle";
for (const d of data_for_chart) {
let radius = radiusScale(d);
context.beginPath();
context.moveTo(d.x + radius, d.y);
context.arc(d.x, d.y, radius, 0, 2 * Math.PI);
context.fillStyle = colorScale(d.gender);
context.fill();
}
}
return context.canvas;
}