2013-09-11 3 views
2

Доброго утра,Layout D3.js Force - показываю только часть графа

только начиная с удивительной библиотекой d3js ...

Я хочу, чтобы показать только часть графа с силой, направленной раскладка. Идея состоит в том, чтобы один узел был объявлен как «центр» и показывал все узлы на расстоянии двух (например) от этого центрального узла, соседей центрального узла и соседей соседей. Если пользователь нажимает на один из отображаемых узлов, он становится «новым» центральным узлом и отображается другой «подграф». Интересно, существует ли пример реализации такого типа подграфа, и если какой-то алгоритм «расстояние между узлами» уже реализован в d3js.

Большое спасибо

мартин

UPDATE: Просто нашел пример Modifying a Force Layout который освещает, как добавлять и удалять узлы и ребра от силы, направленной макете.

ответ

7

Я просто загрузил «доказательство уровня концепции» интерактивного силового направленного подграфа.

http://justdharma.com/d3/sub-graph/

В этом примере я использую backbonejs под капотом. Будучи в первый раз, когда я реализую что-то с backbonejs, я уверен, что использую его очень грубо. Хотя этот пример может осветить один из способов достижения интерактивного субграфа, это наверняка не шаблон, как это сделать - как сказано просто доказательство концепции взлома ...

+1

Вы должны отметить это как правильный ответ ... – amalBit

+1

спасибо, я сделаю это – dorjeduck

2

Это не реализовано в D3, и я не знаю никаких примеров. Что вы должны сделать следующее:

  • Установите атрибут нового узла центра к истине, чтобы предотвратить расположение силы от изменения своей позиции fixed.
  • Установите атрибуты px и py этого же узла в центральное положение.
  • Для каждого узла в макете силы вычислите кратчайший путь к новому центральному узлу.
  • В зависимости от длины пути в каждом случае либо удалите узел, либо сохраните его.

Самая сложная часть здесь - это вычисление пути от каждого узла к новому центру, но даже это довольно стандартная алгоритмическая проблема. Еще одна вещь, о которой следует помнить, - это то, что вам нужно изменить структуры данных, содержащие узлы и ссылки схемы силовых установок, т. Е. Вы не можете устанавливать новые узлы и ссылки для компоновки сил и ожидать, что все будет работать плавно.

+0

Большое спасибо. Я как раз собираюсь его реализовать и, как новичок, - бороться за понимание базовой структуры данных, но в любом случае это часть игры. Закороченный путь кажется довольно прямой рекурсией, и я как бы хорошо знаком с ним из prefuse/flare. Я поделюсь, если из этого выйдет что-то значимое, и пусть этот вопрос откроется какое-то время, поскольку у кого-то еще может быть некоторое понимание. Еще раз спасибо за ваш ответ. – dorjeduck

+0

первый результат ... http://justdharma.com/d3/sub-graph/ – dorjeduck

Смежные вопросы