气泡图与传单和D3.js [问题]:气泡重叠

qvtsj1bj  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(177)

我这里有一个基本的Map,有虚拟数据。基本上是一个气泡Map。
问题是我有多个点(例如:20)与完全相同的GPS坐标。下面的图像是我的csv与虚拟数据,颜色蓝色突出重叠的点在这个基本的例子。这是因为许多公司有相同的城市GPS坐标。

下面是我正在编写的代码:
https://jsfiddle.net/MathiasLauber/bckg8es4/45/经过多次研究,我发现d3.js增加了这个力模拟功能,避免了点碰撞。

// Avoiding bubbles overlapping
    var simulationforce = d3.forceSimulation(data)

      .force('x', d3.forceX().x(d => xScale(d.longitude)))
      .force('y', d3.forceY().y(d => yScale(d.latitude)))
      .force('collide', d3.forceCollide().radius(function(d) {
        return d.radius + 10
      }))
  simulationforce
    .nodes(cities)
    .on("tick", function(d){
      node
       .attr("cx", function(d) { return projection.latLngToLayerPoint([d.latitude, d.longitude]).x;                 })
        .attr("cy", function(d) {return projection.latLngToLayerPoint([d.latitude, d.longitude]).y;                     })
    });

问题是我不能使力布局工作,我的点仍然在对方的顶部。(行:188-200在小提琴)
如果您有任何提示、建议,或者注意到我的代码中有基本错误,请告诉我=D
一堆代码接近我想要实现的
https://d3-graph-gallery.com/graph/circularpacking_group.html
https://jsbin.com/taqewaw/edit?html,output

pxyaymoc

pxyaymoc1#

存在3个问题:
1.为了将圆定位在其原始位置附近,需要在传递给simulation.nodes()调用的数据中指定xy初始位置。
1.在执行强制模拟时,需要在on tick回调中提供要模拟的选择(请参见on('tick')回调函数中的node)。
1.模拟需要使用之前通过模拟计算得出的d.xd.y
相关代码片段如下
第一个
完整的工作演示请访问:https://jsfiddle.net/b2Lhfuw5/

相关问题