避免在d3 v4散点图中重叠数据点

时间:2018-06-19 14:23:11

标签: d3.js

我一直在v4中进行d3可视化,这是一个散点图/气泡图,其中的数据点已填充有图像(请参见JS Bin链接)。

我遇到的问题是许多数据点重叠,因此我想让重叠的点移动直到它们彼此相邻(点的确切位置不太重要)。

我是d3的新手,一直在努力进行仿真(碰撞检测,forceCollide等),并且希望能对我的实现有所帮助。

到目前为止,我的尝试导致最初的x和y数据点被忽略,结果是一个大的非重叠圆。但是我需要保留的是初始的x和y值,并且仅移动重叠的圆(因此,异常值仍然应该是异常值)。

我在下面的JS Bin上创建了一个示例,以演示我所拥有的。特别是,力模拟代码(取消注释Simulation.stop();时)似乎覆盖了初始的x和y值。

我觉得我快到了,但是我做错了顺序...

  var simulation = d3.forceSimulation(data)
  .force('charge', d3.forceManyBody().strength(3))
  .force('collision', d3.forceCollide().radius(function(d) { return d.radius + 1 }) )
      .on('tick', function() {
        svg.selectAll('.node')
          .attr('cx', function(d) { return d.x; })
          .attr('cy', function(d) { return d.y; })
      })
  simulation.stop();

JS Bin Example

0 个答案:

没有答案