Динамическое расстояние в D3

Я реализовал расклад сил d3. Однако проблема для меня заключается в том, что макет не распространяется по экрану. Ниже приведен снимок:

Я хочу, чтобы узлы распространялись по экрану с динамическим расстоянием между ссылками, поскольку на правой и левой сторонах много пустого пространства. Я попытался рандомизировать расстояние ссылки следующим образом:

d3.layout.force()
    .charge(-800)
    .linkDistance(function(d){
        return (Math.random() * (400 - 200) + 1);
    })
    .size([w, h]);

Это увеличивает расстояние связи, но также и в вертикальном направлении. Я пытался установить атрибут linkStrength(), но он просто не работал для меня. Как сделать так, чтобы макет распространялся по региону только в горизонтальном направлении? Есть ли способ, которым мы можем определить расстояние ссылки, чтобы соответствовать прямоугольной области моей страницы?

1 ответ

Одно из решений, которое я вижу, - использовать этот пример ограничивающего прямоугольника, чтобы связать ваш рисунок прямоугольным / горизонтальным образом, а затем установить заряд на очень высокий уровень (цель -10000, что-то в этом роде), чтобы узлы растянулись до максимума перед быть остановленным установленными вами границами. Затем вы можете выбрать альтернативный текст справа или слева от узла в зависимости от его положения, чтобы он не обрезался. Или вы можете связать текст тоже.

Другие вопросы по тегам