我正在尝试将语义缩放的实现与具有四叉树的画笔选择工具结合在D3中的散点图上。 这个想法是默认情况下缩放是活动的。在输入选择时,将创建画笔并停用缩放的mousedown事件。为了加快刷牙速度,我想在四叉树(c.f。http://bl.ocks.org/mbostock/4343214)中组织可见的数据(即已放大的数据)。但我不知道如何仅从缩放范围创建四叉树。
我尝试创建四叉树:
var scaleX = d3.scale.linear()
.domain(...)
.range(...);
var scaleY = d3.scale.linear()
.domain(...)
.range(...);
// var data is an array of Objects containing the coordinates (x,y)
var dataCoords = data.map(function(d){return [scaleX(d.x) scaleY(d.y)];});
/******
Define d3.zoom.extent which does not exist (contrary to d3.brush.extent())
*******/
var s= d3.event.scale;
var t = d3.event.translate;
//top left corner
var tl = ...;
//bottom right corner
var br = ...;
d3Zoom.extent = [tl, br];
/******
Create quadtree from extent
*******/
var quadtree = d3.geom.quadtree()
.extent(d3Zoom.extent)(dataCoords);
但它不起作用。我设法获得四叉树的唯一方法是在缩放之前使用完整的svg作为范围预先创建它:
var quadtree = d3.geom.quadtree()
.extent([[-1, -1], [size + 1, size + 1]])(dataCoords);
当我在放大整个数据之前预先创建四叉树并在之后进行缩放时,四叉树与新放大的数据失去同步,因为数据中的值取决于在缩放事件期间更新的轴刻度(语义缩放)
我无法将http://bl.ocks.org/mbostock/4343214和Zooming and brushing in d3 force directed graph合并,我在http://techslides.com/over-2000-d3-js-examples-and-demos或http://bl.ocks.org或SO中找不到任何相关内容。
有人可以给我一个小提示,说明如何刷四维树只包含放大的数据子集吗?