D3.js заставляет узлы появляться в середине без "отказов" - PullRequest
1 голос
/ 25 февраля 2012

У меня есть настройка D3 с использованием «Узлов» и «Линий». Когда график появляется впервые, он отражается от силы тяжести до тех пор, пока не окажется посередине. Кто-нибудь знает, как сделать так, чтобы он автоматически появлялся посередине без эффекта «отскока»?

P.S Я использую раскладку

Ответы [ 2 ]

5 голосов
/ 25 февраля 2012

Вызов запуска сбрасывает параметр охлаждения, альфа;альфа затухает экспоненциально по мере того, как макет сходится к своему решению, а затем останавливается, чтобы не тратить процессор.При запуске нет дрожания (кроме совпадающих узлов, что необходимо, чтобы избежать деления на ноль).Тем не менее, всякий раз, когда у вас есть противоречивые силы и геометрические ограничения (ссылки), естественно ожидать, что макет будет корректироваться при запуске.

Если вы хотите избежать этого отскока, вам также нужно постоянно поддерживать горячий график (скажем,позвонив по номеру d3.timer(function() { force.resume(); })) или вам нужно будет сделать что-то еще, например, отрегулировать альфа-параметр вручную, чтобы постепенно нагревать, а не мгновенно.

Редактировать: в 2.8.x вы можете полностью избежать первого отскокасинхронное выполнение раскладки при запуске.Например: http://bl.ocks.org/1667139

1 голос
/ 02 марта 2012

Другая стратегия, которую я использовал ранее, состоит в постепенном увеличении радиусов каждого узла с нуля по сравнению с первым, скажем, 50 или 100 силовыми тиками.Вы можете увидеть, как это выглядит (в Protovis, но в d3 он будет вести себя так же) на картограммах Дорлинга на сайте данных one.org .

...