инициализировать d3 quadtree с произвольными именами x и y

Я хочу настроить дерево квадрантов d3, используя данные, которые не имеют столбцов с метками x и y, но с некоторыми другими метками. Читая документы quadtree, я подумал, что смогу сделать это так:

var data = [{"a":6,"b":99.0},{"a":12,"b":227.0},{"a":2,"b":43.0},{"a":23,"b":32.0}];

var xname = "a";
var yname = "b";

var quadtree = d3.geom.quadtree(data)
.x(function(d) {return d[xname]; })
.y(function(d) {return d[yname]; });

Но когда я запускаю этот код, я получаю сообщение об ошибке:

TypeError: d3.geom.quadtree(data).x is not a function. (In 'd3.geom.quadtree(data).x(function(d) {return d[xname]; })', 'd3.geom.quadtree(data).x' is undefined)

Как настроить дерево квадрантов для использования разных меток x и y? (Конечно, я мог бы изменить данные, чтобы использовать «x» и «y», но есть причины, по которым я не хочу этого делать.)


person kmt    schedule 12.02.2016    source источник


Ответы (1)


Не создавайте свое дерево квадрантов, передавая ему данные

e.g :

var data = [{"a":6,"b":99.0},{"a":12,"b":227.0},{"a":2,"b":43.0},{"a":23,"b":32.0}];

var xname = "a";
var yname = "b";


var quadtree = d3.geom.quadtree(/* nothing here */)
     .x(function(d) {return d[xname]; })
     .y(function(d) {return d[yname]; });

привязка данных должна быть добавлена ​​позже

d3.selectAll('circle').data(quadtree(data))
   .append('circle');
person Damien Fayol    schedule 12.02.2016