【发布时间】:2018-03-12 06:46:17
【问题描述】:
我试图在这个 sn-p 的帮助下使用下面附加的数据在散点图中找到最近的邻居 -
const voronoiDiagram = d3.voronoi()
.x(d => d.x)
.y(d => d.y)(data);
data.forEach(function(d){
console.log(d, voronoiDiagram.find(d.x, d.y, 50));
});
现在我使用的数据集是标准的鸢尾花萼片,花瓣长度数据 格式 -
{"sepalLength":7.7,"sepalWidth":3,"petalLength":"6.1","petalWidth":"2.3","species":"virginica","index":135,"x":374.99999999999994,"y":33.75,"vy":0,"vx":0},
{"sepalLength":6.3,"sepalWidth":3.4,"petalLength":"5.6","petalWidth":"2.4","species":"virginica","index":136,"x":524.9999999999999,"y":191.25,"vy":0,"vx":0},
{"sepalLength":6.4,"sepalWidth":3.1,"petalLength":"5.5","petalWidth":"1.8","species":"virginica","index":137,"x":412.5,"y":179.99999999999994,"vy":0,"vx":0},
{"sepalLength":6,"sepalWidth":3,"petalLength":"4.8","petalWidth":"1.8","species":"virginica","index":138,"x":374.99999999999994,"y":225,"vy":0,"vx":0},
....
所以,本质上它的形式是
{d: {x, y, sepal length, width, petal length, width}.
现在,我正在尝试从reference 找到与 d3 voronoi 最近的邻居。
但是,我得到的只是结果 -
让我的数据集中的点 d =
{"sepalLength":5.9,"sepalWidth":3,"petalLength":"5.1","petalWidth":"1.8","species":"virginica","index":149,"x":374.99999999999994,"y":236.24999999999997,"vy":0,"vx":0}
现在,voronoiDiagram.find(d.x, d.y, 50) 导致 -
"[375,236.25]"
也就是说,坐标被四舍五入的同一点而不是另一个点。
那么,在这种情况下,如何从 voronoi 图中排除当前正在扫描的点。 另外,如果我排除这一点并重新计算一切,从性能角度来看这会好吗?
谁能帮我从一组点中找到最近的邻居 使用 d3 voronoi / quadtrees(我已经尝试了 Mike Bostock 的几个示例,但由于一些错误无法让它们在我的情况下工作, 如果 d3 voronoi 没有帮助,那么会发布它们)。
【问题讨论】:
-
最近的邻居可以解释为那些紧邻的(与目标共享边的那些单元格)。所以要澄清一下,您是在查看某个半径内的单元格还是那些与给定单元格共享边缘的单元格?
-
寻找半径内的单元格
标签: d3.js scatter-plot nearest-neighbor voronoi quadtree