circles = {
let localNodes = countyShapes.features
.map(d => {
let e = eavsByCounty.get(d.id);
let c = center(d);
let demo = demographicsData[2018].get(d.id);
let pop = demo ? demo["B01003_001E"] : 0;
let o = {
...d,
cx: c[0],
cy: c[1],
x: c[0],
y: c[1]
};
if (e) {
o.p = rPopScale(pop);
o.value = diff(e);
}
return o;
})
.filter(d => !isNaN(d.p));
let simulation = d3
.forceSimulation(localNodes)
.force(
"collide",
d3
.forceCollide()
.radius(d => d.p + 1)
.strength(1)
)
.force(
"x",
d3.forceX(d => {
return d.cx;
})
)
.force(
"y",
d3.forceY(d => {
return d.cy;
})
);
simulation.tick(100);
localNodes.sort((a, b) => a.metric - b.metric);
return localNodes;
}