{
const svg = d3.create('g').attr("width", width+margin.left+margin.right).attr("height", height+margin.top+margin.bottom)
var canvas_node = svg.append('canvas')
const context = canvas_node.node().getContext('2d')
d3.select(context.canvas).attr('width', width+margin.left+margin.right).attr('height', height);
var velocityDecay = 0.2;
let nodes = []
var cycles = 1000;
const simulation = d3.forceSimulation();
simulation.nodes(nodes);
simulation.force('x', d3.forceX(d => x("All")).strength(0.01))
.force('y', d3.forceY().strength(0.05).y(d => y(parseFloat(d.depth))))
.force('collide',d3.forceCollide().radius(function(d) { return size(d.magnitude) + 1}))
.force("charge", d3.forceManyBody().strength(-0.1 ))
.alphaDecay(0).velocityDecay(velocityDecay).on('tick', ticked)
simulation.tick(10)
var tick = 0
var start = 1
var limit = 20
function ticked() {
tick = tick+1
context.clearRect(0, 0, width+margin.left+margin.right, height)
nodes.forEach(v => {
context.beginPath();
context.fillStyle = "orange";
context.arc(v.x,v.y,size(v.magnitude),0,Math.PI*2);
context.fill();
})
}
uniq_dates.forEach((val, i) => {
console.log(val, i)
setTimeout(function() {
console.log(val, i)
nodes = [...nodes, ...data.filter(v => v.date_f == val) ]
simulation.nodes(nodes)
} , i*200)
if (i > uniq_dates.length) {
simulation.alphaDecay(0.5).stop()
}
})
return svg.node()
}