Javascript 滑块事件后D3模拟不工作

Javascript 滑块事件后D3模拟不工作,javascript,d3.js,Javascript,D3.js,我有一个带碰撞检测的bubblechart,它用滑块改变半径。 模拟定义如下: var simulation = d3.forceSimulation() .force("x", d3.forceX(width/2).strength(0.05)) .force("y", d3.forceY(height/2).strength(0.05)) .force("collide", d3.forceCollide(function(d){ return scaleRadius(d

我有一个带碰撞检测的bubblechart,它用滑块改变半径。 模拟定义如下:

var simulation = d3.forceSimulation()
  .force("x", d3.forceX(width/2).strength(0.05))
  .force("y", d3.forceY(height/2).strength(0.05))
  .force("collide", d3.forceCollide(function(d){
    return scaleRadius(d.value)+1;
  }));
操纵滑块后,我调用一个函数,该函数依次调用以下代码:

var circles = d3.selectAll(".circlesvg")
circles.selectAll(".artist").data(datapoints)
  .transition()
  .attr("r", function(d){
  return d.value;
  })
因为半径可能会变大,所以我需要重新运行模拟以检查碰撞,并使DOM进行适当的转换。然而,模拟代码似乎没有做任何事情

simulation.nodes(datapoints)
  .on("tick", ticked)
我想知道我是否在模拟和节点之间没有正确的绑定


提前感谢您的帮助。

在传递新数据后

simulation.nodes(data);
…您必须重新加热模拟:

simulation.alpha(0.8).restart();
下面是一个非常简化的演示:

var svg=d3.选择(“svg”);
var color=d3.scaleOrdinal(d3.schemeCategory 10);
var data=[{r:10},{r:5},{r:15},{r:20},{r:9},
{r:30}、{r:12}、{r:7}、{r:26}、{r:17}];
var模拟=d3.力模拟(数据)
.力(“x”,d3.力x(150).强度(0.05))
力量(“y”,d3。力量(75)。力量(0.05))
.力(“碰撞”,d3.力碰撞(功能(d){
返回d.r+1;
}));
var node=svg.selectAll(“.circles”)
.数据(数据)
.输入()
.附加(“圆圈”)
.attr(“r”,d=>d.r)
.attr(“填充”(d,i)=>颜色(i))
模拟.节点(数据)
.on(“勾选”,d=>{
node.attr(“cx”,d=>d.x).attr(“cy”,d=>d.y);
});
d3.选择(“按钮”)。在(“单击”)上,()=>{
data.forEach(d=>d.r=Math.random()*30);
node.transition().duration(500).attr(“r”,d=>d.r);
模拟。节点(数据);
simulation.alpha(0.8).restart();
})

随机化