Javascript 如何更改气泡图中一个元素的位置

Javascript 如何更改气泡图中一个元素的位置,javascript,svg,d3.js,Javascript,Svg,D3.js,我试图在D3.js中实现一个交互:选择一个气泡会使它移动到另一个气泡 d3层次结构具有布局,其中。我可以更新数据以增加选择中圆的大小。但是,我看不到任何方法来设置一个圆在布局中的位置,并让其他圆围绕它进行排列。我需要像“给定(x,y)处的圆,围绕它创建一个气泡图”这样的东西,而这在d3.pack中是不存在的 d3力也可用于制造。如果我添加一些类似于使用d3.drag的交互,我可以使一个圆朝中心移动,如下所示: function dragstarted(event) { const int

我试图在D3.js中实现一个交互:选择一个气泡会使它移动到另一个气泡

d3层次结构具有布局,其中。我可以更新数据以增加选择中圆的大小。但是,我看不到任何方法来设置一个圆在布局中的位置,并让其他圆围绕它进行排列。我需要像“给定(x,y)处的圆,围绕它创建一个气泡图”这样的东西,而这在d3.pack中是不存在的

d3力也可用于制造。如果我添加一些类似于使用d3.drag的交互,我可以使一个圆朝中心移动,如下所示:

function dragstarted(event) {
    const interX = d3.interpolate(event.x, dimensions.width / 2);
    const interY = d3.interpolate(event.y, dimensions.height / 2);

    if (!event.active) simulation.alphaTarget(0.3).restart();

    (function toCenter(i) {
      setTimeout(function() {
        event.subject.fx = interX(i / 100);
        event.subject.fy = interY(i / 100);

        i++;
        if (i < 100) {
          toCenter(i);
        } else {
          event.subject.fx = null;
          event.subject.fy = null;
        }
      }, 1)
    })(1);
  }
功能拖动启动(事件){
常数interX=d3.插值(事件x,维度宽度/2);
常数y=d3.插值(事件y,尺寸高度/2);
如果(!event.active)simulation.alphaTarget(0.3).restart();
(功能输入(i){
setTimeout(函数(){
event.subject.fx=interX(i/100);
event.subject.fy=interY(i/100);
i++;
如果(i<100){
toCenter(i);
}否则{
event.subject.fx=null;
event.subject.fy=null;
}
}, 1)
})(1);
}
这是唯一有效的方法——它将圆移动到中心,但它会使力通过几个刻度,因此圆可能不会真正到达图表的中心。此外,与更新数据不同,我不知道当用户想要取消扩展的圆时,如何将圆重置为其原始位置

我的问题是,如何让气泡图中的一个圆移动到中心,并让其他圆重新排列它们自己?我是否可以对d3.pack或d3.force进行一些更改,或者我应该尝试不同的方法?还要一个图书馆吗