2014-01-14 2 views
3

동일한 노드에 대해 두 개의 접을 수있는 힘 트리가 있습니다.d3js에서 하나의 강제 방향 그래프에서 다른 그래프로 전환

d3js에서 노드 전환 및 가장자리 재구성을 통해 한 트리에서 다른 트리로 전달할 수있는 예제는 보지 못했습니다.

그렇게 할 방법이 있습니까?

또 다른 관련 질문으로, 강제 선도 그래프에 대한 각 노드의 위치를 ​​초기화 할 수 있습니까?

편집 : 여기에 example입니다. 나는 두 개의 나무를 가지고 있는데, 그 링크는 하나이고 다른 트리는 동일한 분자이지만 트리 구조는 다릅니다. 같은 분자 나 엔티티에서 다른 나무 사이를 움직일 수 있다면 좋을 것이라고 생각합니다.

+0

* 거리 함수 *는 무엇을 의미합니까? 'linkDistance'를 의미합니까, 아니면'tick '함수에서 수행중인 계산을 언급하고 있습니까? –

+0

@ t.888, 혼란에 대한 미안 거리 함수는 내가 linkDistance 및 트리 구조를 얻는 방법이지만, 나는 linkDistance가 강제로 유도 된 그래프에서 매우 구별되지 않는다고 느낍니다. – user2149631

+0

노드 배열을 강제 레이아웃에 전달하기 전에 노드의'x' 및'y' 속성을 설정하여 위치를 초기화 할 수 있지만 여러 노드를 같은 위치로 설정하면 문제가 발생합니다. 그러면 그래프가 이동합니다 미친. –

답변

5

원칙적으로 다음 단계를 따르십시오.

  • 노드의 위치를 ​​고정하려면 강제 레이아웃을 중지하십시오.
  • 링크가 사라집니다 (예 : 페이드 아웃).
  • 노드를 새 위치로 전환하십시오. 이전 데이터의 새 위치를 설정하거나 데이터를 완전히 변경 한 다음 전환이있는 강제 레이아웃의 tick 핸들러와 동일한 코드를 사용하여 수행 할 수 있습니다.
  • 링크를 다시 추가하십시오.
  • 새 레이아웃에서도 강제 레이아웃을 사용하는 경우이를 시작하십시오.

나는 here의 예를 구현했습니다. 나는 2 세트의 데이터와 2 개의 힘 레이아웃을 사용한다. 처음에는 첫 번째 배치 레이아웃의 노드와 링크 만 표시되고 두 번째 배치는 백그라운드에서 실행됩니다. 그런 다음 첫 번째가 중지되고 위에서 설명한 단계를 수행합니다.

이는 모든 요구 사항을 충족하지는 않지만 (예 : 노드 전환 방법과 관련하여) 이러한 구현을위한 출발점으로 사용할 수 있습니다.

+1

... downvoted 사람이이 대답이 도움이되지 않는 방법을 설명 할 수 있다면 정말 도움이 될 것입니다. –

+0

나는 링크와 노드 위치를 업데이트 할 때 force0의 눈금 기능을 null로 변경해야합니까? – user2149631

+0

아니요. 강제 레이아웃이 중지 된 경우 호출되지 않습니다. –

관련 문제