在D3中结合语义缩放和四叉树刷

时间:2014-11-12 23:40:55

标签: d3.js zooming brush quadtree

我正在尝试将语义缩放的实现与具有四叉树的画笔选择工具结合在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/4343214Zooming and brushing in d3 force directed graph合并,我在http://techslides.com/over-2000-d3-js-examples-and-demoshttp://bl.ocks.org或SO中找不到任何相关内容。

有人可以给我一个小提示,说明如何刷四维树只包含放大的数据子集吗?

0 个答案:

没有答案