2012-01-26 14 views
6

Czy jest możliwe utworzenie gładkiego animowanego efektu powiększania (podobnego do dok w systemie Mac OS X) podczas ustawiania kursora nad węzłami w wizualizacji graficznej ukierunkowanej na siłę przy użyciu bibliotek D3 lub GraphGL?Efekt lupy dla wizualizacji sieci ukierunkowanej D3/GraphGL?

Węzły będą musiały rozwinąć i przesunąć pozostałe wokół niego, zachowując układ ukierunkowany na siłę.

Jeśli ktoś mógłby fork this wykazać, że byłoby wspaniale! Dzięki

uwaga, to jest inna od prostego jak zoom w this question

Odpowiedz

13

wielkie pytanie. Aby na nie odpowiedzieć, zaimplementowałem D3 plugin dla fisheye distortion. Z grubsza opiera się na wcześniejszych pracach w Flare i Sigma.js, które są z kolei oparte na pracach Sarkara i Browna, "Graphical Fisheye Views of Graphs", CHI'92.

Oto quick demo ze zbiorem danych o błędach. Wyświetl źródło kodu. Zrobię to później, póki mam czas.

Uwaga: to wykorzystuje statyczny rozkład siły; układ jest obliczany przy uruchomieniu i nie zmienia się. Myślę, że jest to prawdopodobnie to, co chcesz w połączeniu z zniekształceniem rybiego oka, inaczej zniekształcenie będzie konkurować z twoją zdolnością do dynamicznego przemieszczania węzłów. Ale teoretycznie można je łączyć, jeśli tego chcesz.

+0

+1 Niesamowita odpowiedź! Zrobiłem swoją część przyznawania punktów reputacji. Dziękuję Ci bardzo za Twój czas. – Legend

+0

Zamiast łączyć je razem, czy myślisz, że byłoby możliwe, aby powiedzieć, pudełko, które pozwala nam wybrać, czy włączyć/wyłączyć efekt rybiego oka? To by łączyło najlepsze z obu światów i byłoby wspaniałym dodatkiem, jeśli znajdziesz jakiś czas. – Legend

+0

Oczywiście, możesz to zrobić. Użyj [selection.on] (https://github.com/mbostock/d3/wiki/Selections#wiki-on), aby dodać lub usunąć detektory zdarzeń. – mbostock

1

czystym CSS może to zrobić, jeśli go zaakceptować.

.app{ 
-webkit-transition-property:-webkit-transform; 
-moz-transition-property:-moz-transform; 
-transition-property:-transform; 
-webkit-transition-duration:.15s; 
-moz-transition-duration:.15s; 
-transition-duration:.15s; 
} 

.app:hover{ 
-webkit-transform:scaleX(1.2) scaleY(1.2); 
-moz-transform:scaleX(1.2) scaleY(1.2); 
-transform:scaleX(1.2) scaleY(1.2); 
} 

Jest używany na mojej stronie głównej tuoxie.me

3

Byłoby niesamowite, jeśli można to zrobić z czystym CSS, ale niestety wygląda na to atrybuty dla poszczególnych elementów SVG (tj kręgów) nie są osiągalne za pomocą CSS. W szczególności "promień", ale myślę, że dotyczy to całego szeregu właściwości elementów SVG.

Ale nie jest to zbyt trudne do zrobienia przez d3. Oto my example jsfiddle. Zasadniczo wykonaj następujące czynności:

  1. Użyj przejść (zobacz Tutorial #2, aby dowiedzieć się, jak z nich korzystać). Zasadniczo wykonaj d3element.transition().delay(300).attr(...), aby wprowadzić zmiany.
  2. Utrzymanie kółek "wysadzonych w powietrze" z nakładania się na najlepsze, co mogłem wymyślić, to zmodyfikować ustawienie force layout's charge. Zwiększenie sił odpychających, gdy koła są większe.

Mam nadzieję, że to jest to, czego szukasz ...