我一直在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();