В принципе, в функции клеща(), сбросить массив узлов х значения, что вы хотите, чтобы они были (предположительно некоторые масштаб делать с годом), а узел и ссылки будут нарисованы при тех значениях х, и последующие вычисления силы будут начинаться с этих значений слишком
force.on("tick", function() {
// Adjust to what you want nodePos to be, here I'm just doing it by index
graph.nodes.forEach (function(nodePos,i) {
nodePos.x = i * 15;
//nodePos.x = xscale (data[i].year); // or whatever
})
// then normal node/link layout
Я раздвоенные этот стандартный бессиловым направленным примером, чтобы показать blt909 одним из способов могло бы быть сделано -> http://jsfiddle.net/vztydams/
PS Если у вас есть много предметов и очень мало дискретных значений x, лучше всего сначала дать им немного места для маневра (т. диапазон в х, который они содержат, а не значение), затем медленно сузить этот диапазон вниз. В противном случае узлы будут «застревать» друг за другом.
Edit 02/03/16:
Привет Alvaro, по существу, в graph.nodes ваши связанные данные, поскольку они являются объектами, которые прикреплены к отображаемым узлов в качестве данных.
Так что, если я создал шкалу, и палку в случайном году на данность:
var dom = [1994,2014];
var xscale = d3.scale.linear().domain(dom).range([20,400]);
graph.nodes.forEach (function(datum) {
datum.year = dom[0] + Math.floor (Math.random() * (dom[1] - dom[0]));
});
...
Теперь мы можем ограничить й положение точки привязки каждого узла, как это:
graph.nodes.forEach (function(d,i) {
//d.x = i * 15;
d.x = xscale(d.year);
})
(Как я уже говорил, если у вас есть много узлов и несколько лет, вы бы лучше ограничения на диапазон, а затем сужение этого диапазона вниз на каждый последующий тик)
http://jsfiddle.net/vztydams/2/
Спасибо, это хорошая помощь! Мы используем формат даты, чтобы выбрать только год с нашей даты: '(новая дата (d.date_birth) .getFullYear())'. Как я могу применить это к 'nodePos.x = i * 15;'? Мы не смогли найти способ доступа к связанным данным. –
См. Править выше ^^^ – mgraham