Я использую макет дерева D3, такой как этот: http://mbostock.github.com/d3/talk/20111018/tree.html
Я изменил его для своих нужд, и я столкнулся с проблемой. В примере также есть одна и та же проблема: если у вас слишком много узлов, то они становятся компактными и затрудняют чтение и взаимодействие. Я хочу определить минимальное вертикальное пространство между узлами, в то время как этап повторной калибровки позволяет такое расстояние.
Я попытался изменить алгоритм разделения, чтобы он работал:
.separation(function (a, b) {
return (a.parent == b.parent ? 1 : 2) / a.depth;
})
Это не сработало. Я также попытался рассчитать, какая глубина имела большинство детей, а затем говорила, что высота сцены children * spaceBetweenNodes
. Это приблизило меня, но все еще было неточно.
depthCounts = [];
nodes.forEach(function(d, i) {
d.y = d.depth * 180;
if(!depthCounts[d.depth])
depthCounts[d.depth] = 0;
if(d.children)
{
depthCounts[d.depth] += d.children.length;
}
});
tree_resize(largest_depth(depthCounts) * spaceBetweenNodes);
Я также попытался изменить значение node x
в методе ниже, где он вычисляет разделение y
, но не сигару. Я бы опубликовал это изменение, но я удалил его из своего кода.
nodes.forEach(function(d, i) {
d.y = d.depth * 180;
});
Если вы можете предложить способ или знать способ, которым я могу выполнить минимальное расстояние между узлами, отправьте сообщение. Я буду очень благодарен. Я, вероятно, пропустил что-то очень простое.