2016-07-20 8 views
0

Vis.js을 사용하여 항목 간 관계를 표시하는 웹 응용 프로그램을 만들고 있는데, ~ 1200 개의 가장자리로 ~ 260 개의 노드를 표시해야하는 시점까지 모든 것이 완벽하게 작동합니다. 그들 사이에.많은 노드가 추가되었을 때 Vis.js가 그래프를 보이지 않음

일단 노드에 도달하면 그래프에는 공백과 파란색 선이 표시됩니다. 확대/축소하려고하면 선이 사라지고 모두 흰색입니다.

노드의 위치를 ​​볼 때 그 중 많은 수가 음수이거나 매우 큰 x, y 위치 (보통 x는 -300, y는 약 478759527705558300000)에 있음을 알 수 있습니다.

물리학을 사용하지 않으려 고 노력했습니다. 그래프는 계층 적 모드이며 코드에서 레벨을 수동으로 설정했지만 레벨은 정확합니다.

네트워크 옵션합니다 (improvedLayout 옵션은 내가 인터넷에서 발견 단지 가능성이었다 내가 그것을 제거하면 그냥 동일하게 작동) :

var options = { 
     layout: { 
      improvedLayout: false, 
      hierarchical: { 
       direction: direction, 
       sortMethod: "directed" 
      } 
     } 
    } 

스크린 샷 : Screenshot

+0

vis.js가 레이아웃을 관리하고 노드 및 에지의 배열을 제공하게 하시겠습니까? x, y 좌표 데이터는 어디에서 왔습니까? –

+0

@RobinMackenzie vis.js가 계층 구조이므로 레이아웃을 관리하게하고, 각 노드에'level' 인수를 제공합니다. 더 작은 데이터 세트로도 잘 작동합니다. – vagaerg

+0

레이아웃 완료 후'network.fit();'를 사용하여 줌에 문제가 있는지 확인할 수 있습니다. –

답변

1

나는 약 615 개의 노드와 614 개의 에지 (40 개의 홀수 클러스터 노드는 제외하고 그 중 일부는 클러스터 클러스터)로 구성된 계층 레이아웃 그래프를 가지고있다. 나는 visjs에 동일한 문제로 도착했다.

이 문제를 극복하는 데 도움이되는 빠른 점은 명시 적으로 network .stabilize() 메서드를 반복 횟수를 지정하는 인수와 함께 호출하는 것이 었습니다. 기본 반복은 1000입니다. 나는 10000을 통과했으며 그래프는 자체적으로 안정적으로 안정화되었습니다. 몇 초가 더 걸렸다. 나는 괜찮았다. 그러나 노드 수가 1000 개로 증가함에 따라 안정화 시간이 단축됩니다. 그래서 저는 해결책을 찾기 위해 visjs 코드를 조사하기 시작했습니다.

visjs 코드를 보면서 setupHierarchicalLayout() 함수 내에서 _condenseHierarchy()에 대한 호출이 있음을 발견했습니다. 이 메서드는 노드와 가장자리 사이의 공백을 최소화하려고 시도합니다 (코드는 아직 완전히 이해하지 못했습니다.). _condenseHierarchy()는 노드의 좌표를 수정합니다. 노드가 반복 많이 걸리는 먼 위치를 가져옵니다 때 (에서 안정)

(this.body.nodes["node-11"]).y 
1530 
(this.body.nodes["node-11"]).y 
64920 

그래프의 다른 노드와 가깝게 가져옵니다 : Y 이하) 전 _condenseHierarchy (에 호출 후 좌표를 참조하십시오. _condenseHierarchy()를 비활성화하고 그래프를 멋지게 표시했습니다.

_condenseHierarchy()를 비활성화하면 다른 문제가 발생할 수 있습니다. _condenseHierarchy()를 이해하고 실험하기 위해 더 많은 시간을 할애 할 것입니다.

+0

라이브러리가 어떻게 작동하는지에 대한 흥미로운 통찰력. 우리는 결국 (시간 제약) "백 로그"에이 수정 사항을 남겨 두어야했기 때문에 실제 솔루션을 찾지 못했습니다. 그러나 앞으로 귀하의 솔루션을 조사 할 때가 있으면 결과를 게시 할 것입니다. 감사! 편집 : 해결 방법을 제공 한 이후 답변으로 선택 – vagaerg

-1

것은이 문제를 해결하려면 nodeSpacing, levelSeparation 및 treeSpacing과 같은 계층 적 레이아웃 매개 변수를 조정할 수 있습니다. 여기에 예제가있다 hierarchicalLayoutWithoutPhysics

+0

"나를 너무"답변으로 게시하지 마십시오. 대신이 질문을 새로운 답변에 대한 알림을 받기 위해 즐겨 찾기로 표시 할 수 있습니다. 충분한 평판을 얻은 후에는 [upvote] (http://stackoverflow.com/privileges/vote-up) 또는 [현상금 추가] (http://stackoverflow.com/privileges/set-bounties) 더 많은 관심을 끌기 위해 –