【问题标题】:Update the ForceSimulation with new bubble radius使用新的气泡半径更新 ForceSimulation
【发布时间】:2019-05-26 20:45:19
【问题描述】:

我已经用力模拟初始化了一个气泡图。我如何更新数据,即。更改气泡半径。

我尝试使用一组新节点重新启动 forceSimulation,但所有其他节点都移动,好像电荷增加了一样。

var nodes=[{'radius':3},{'radius':4},{'radius':5},{'radius':6}];

var sim = d3.forceSimulation(nodes)
    .force('charge', d3.forceManyBody().strength(-1))
    .force('center', d3.forceCenter(width / 2, height / 2))
    .force('collision', d3.forceCollide().radius(function(d) {
      return d.radius
    }))
    .on('tick',ticked)


 function ticked() {
  var u = svgContainer
     .selectAll('circle')
     .data(nodes)
   u.enter()
    .append('circle')
    .attr('fill','orange')
    .merge(u)
    .attr('r', function(d) {
    return d.radius
    })
   .attr('cx', function(d) {
      return d.x
    })
   .attr('cy', function(d) {
      return d.y
    })
  u.exit().remove()
}


function updateBubbles(){
    node[0]['radius]=10;
     sim.nodes(nodes).alpha(1).restart();
}

【问题讨论】:

    标签: d3.js


    【解决方案1】:

    您可以将 updateBubbles 更改为以下内容:

    function updateBubbles() {
        svgContainer.selectAll('circle')
            .attr('r', 10);     
    }
    

    节点当前移动就像电荷增加一样,因为您将 alpha 设置为 1 并重新启动模拟。当我们立即重新加热图表时,这是我们期望看到的行为。

    【讨论】:

    • 发生这种情况时,不应用力模拟
    猜你喜欢
    • 2017-11-03
    • 2020-09-17
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多