2013-08-30 25 views
9

Zaimplementowałem układ sił D3. Problem jednak dla mnie polega na tym, że układ nie rozprzestrzenia się po ekranie. Poniżej znajduje się zrzut:Odległość łącza dynamicznego w układzie sił D3

enter image description here

Chcę węzły rozprzestrzeniać po ekranie z odległości dołączanej dynamicznie jak tam jest dużo białej przestrzeni po prawej i lewej stronie. Starałem się losowo odległość łącza następująco:

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

To zwiększa odległość łącza ale również w kierunku pionowym. Wydarzenie próbowałem ustawić atrybut linkStrength(), ale to po prostu nie działa dla mnie. Jak mogę rozłożyć ten układ w całym regionie tylko w kierunku poziomym? Czy istnieje sposób, w jaki możemy zdefiniować odległość łącza, aby dopasować się do prostokątnego obszaru mojej strony?

Odpowiedz

3

Jednym z rozwiązań, które widzę jest użycie this bounding box example, aby związać rysunek w sposób prostokątny/poziomy, a następnie ustawić ładunek na bardzo wysokim poziomie (dążyć do -10000, coś w tym stylu), tak aby węzły były rozłożone na maksimum przed zatrzymaniem przez wyznaczone granice. Następnie można wybrać opcję alternatywnego ustawienia tekstu po prawej lub po lewej stronie węzła, w zależności od jego położenia, tak aby nie został obcięty. Możesz też związać tekst.

+0

Aha i przy okazji diagram akordów może idealnie pasować do twoich danych, więc możesz też to sprawdzić (więcej informacji [tutaj] (https://github.com/mbostock/d3/wiki/Chord-Layout)) –

+0

Po powiązaniu rysunku z wykonaniem w [przykładzie ramki ograniczającej] (http://mbostock.github.io/d3/talk/20110921/bounding.html) i ustawieniu ładowania na bardzo wysoką wartość, węzły są wyrównane przez granicę iw tym przypadku, jeśli liczba węzłów jest bardzo wysoka, wykres może nie być czytelny. Czy istnieje sposób, w jaki mogę przypisać określone pozycje x i y do każdego węzła, ponieważ układ działa w oparciu o pewien warunek, aby zajmował cały obszar? – Nagesh