JavaScript의 그래프 시각화 라이브러리


523

유향 그래프를 나타내는 데이터 구조가 있으며이를 HTML 페이지에서 동적으로 렌더링하려고합니다. 이 그래프는 보통 몇 개의 노드 일 것입니다. 맨 끝에서 10 개일 것입니다. 따라서 제 생각에는 성능이 큰 문제가되지 않을 것입니다. 이상적으로는 사용자가 노드를 드래그하여 레이아웃을 수동으로 조정할 수 있도록 jQuery에 연결하고 싶습니다.

참고 : 차트 라이브러리를 찾고 있지 않습니다.


답변:


923

나는 당신이 찾고있는 것을 정리했습니다 : http://www.graphdracula.net

지시 그래프 레이아웃, SVG가있는 JavaScript이며 노드를 드래그 할 수도 있습니다. 여전히 약간의 조정이 필요하지만 완전히 사용할 수 있습니다. 다음과 같은 JavaScript 코드를 사용하여 노드와 가장자리를 쉽게 만듭니다.

var g = new Graph();
g.addEdge("strawberry", "cherry");
g.addEdge("cherry", "apple");
g.addEdge("id34", "cherry");

앞서 언급 한 Raphael JS 라이브러리 (graffle 예제)와 인터넷에서 찾은 힘 기반 그래프 레이아웃 알고리즘 (모든 오픈 소스, MIT 라이센스)에 대한 코드를 사용했습니다. 당신이 어떤 말이 있거나 특정 기능이 필요한 경우, 나는 그것을 구현할 수 있습니다, 그냥 물어보세요!


다른 프로젝트도 살펴볼 수 있습니다! 다음은 두 가지 메타 비교입니다.

  • SocialCompare 에는 광범위한 라이브러리 목록이 있으며 "노드 / 에지 그래프"라인은 그래프 시각화 라이브러리를 필터링합니다.

  • DataVisualization.ch는 노드 / 그래프 라이브러리를 포함하여 많은 라이브러리를 평가했습니다. 불행히도 직접 링크가 없으므로 "graph"를 필터링해야합니다.선택 DataVisualization.ch

다음은 유사한 프로젝트 목록입니다 (일부는 이미 여기에서 언급했습니다).

순수한 JavaScript 라이브러리

  • vis.js 는 다양한 유형의 네트워크 / 에지 그래프와 타임 라인 및 2D / 3D 차트를 지원합니다. 자동 레이아웃, 자동 클러스터링, 탄력 물리 엔진, 모바일 친화적, 키보드 네비게이션, 계층 레이아웃, 애니메이션 등 MIT는 라이센스 및 자기 조직화 네트워크에 대한 연구를 전문으로 네덜란드의 회사에 의해 개발.

  • Cytoscape.js -jQuery 규칙에 따라 모바일 지원을 통한 대화식 그래프 분석 및 시각화. NIH 보조금을 통해 자금을 지원하고 @maxkfranz (아래 의 답변 참조 )가 여러 대학 및 기타 기관의 도움을 받아 개발했습니다.

  • JavaScript InfoVis Toolkit- 대화 형 다목적 그래프 그리기 및 레이아웃 프레임 워크 인 Jit 예를 들어 쌍곡 트리를 참조하십시오 . 트위터 DataViz의 건축가에 의해 만들어진 니콜라스 가르시아 벨몬트센차에 의해 구입 한 2010 년.

  • D3.js Protovis의 후속 제품인 강력한 다목적 JS 시각화 라이브러리. 참고 항목 강제 방향 그래프의 예를, 그리고 다른 그래프 예제 갤러리 .

  • Plotly의 JS 시각화 라이브러리는 JS, Python, R 및 MATLAB 바인딩과 함께 D3.js를 사용합니다. IPython에서 nexworkx 예를 참조하십시오 여기 , 인간의 상호 작용의 예를 여기에 , 그리고 JS 삽입의 API .

  • sigma.js 그래프를 그리기위한 가볍지 만 강력한 라이브러리

  • 대화식으로 연결된 그래프를 작성하기위한 jsPlumb jQuery 플러그인

  • Springy- 강제 지향 그래프 레이아웃 알고리즘

  • John Resig의 Processing 라이브러리의 Processing.js Javascript 포트

  • JS Graph It-직선으로 연결된 드래그 앤 드롭 상자. 라인의 최소 자동 레이아웃.

  • RaphaelJS의 Graffle- 일반적인 다목적 벡터 드로잉 라이브러리의 대화식 그래프 예제입니다. RaphaelJS는 노드를 자동으로 레이아웃 할 수 없습니다. 이를 위해 다른 라이브러리가 필요합니다.

  • JointJS Core -David Durman의 MPL 라이센스 오픈 소스 다이어그램 라이브러리. 정적 다이어그램 또는 완전한 대화식 다이어그램 도구 및 애플리케이션 빌더를 작성하는 데 사용할 수 있습니다. SVG를 지원하는 브라우저에서 작동합니다. 핵심 패키지에 포함되지 않은 레이아웃 알고리즘

  • mxGraph 이전의 상용 HTML 5 다이어그램 라이브러리, 이제 Apache v2.0에서 사용 가능합니다. mxGraph가에서 사용되는 기본 라이브러리입니다 draw.io .

상업용 도서관

  • GoJS Interactive 그래프 그리기 및 레이아웃 라이브러리

  • HTML Commercial 그래프 그리기 및 레이아웃 라이브러리 용 yFiles

  • KeyLines Commercial JS 네트워크 시각화 툴킷

  • ZoomCharts 상업용 다목적 시각화 라이브러리

  • Syncfusion JavaScript Diagram 도면 및 시각화를위한 상용 다이어그램 라이브러리.

버려진 도서관

  • Cytoscape Web Embeddable JS Network 뷰어 (새로운 기능은 계획되지 않음, Cytoscape.js에 의해 성공)

  • Graphviz 그래프 용 Canviz JS 렌더러 . 2013 년 9 월에 포기 됨.

  • arbor.js 멋진 물리학과 눈을 가진 정교한 그래프. 월에 버려진 2012 여러 반 유지 포크가 존재한다.

  • jssvggraph "SVG 객체를 사용하는 Javascript 라이브러리로 구현 된 가장 간단한 힘 지향 그래프 레이아웃 알고리즘" 2012 년에 포기 됨.

  • jsdot 클라이언트 측 그래프 그리기 응용 프로그램. 2011 년 포기 .

  • 시각화를위한 Protovis Graphical Toolkit (JavaScript). d3으로 대체되었습니다.

  • 연결 및 관계에 대한 Moo Wheel Interactive JS 표현 (2008)

  • JSViz 2007 시대 그래프 시각화 스크립트

  • JavaScript에 대한 dagre 그래프 레이아웃

자바 스크립트가 아닌 라이브러리

  • Graphviz 정교한 그래프 시각화 언어

  • 플레어 아름답고 강력한 플래시 기반 그래프 그리기

  • NodeBox Python 그래프 시각화


4
예, 지정된 모서리가 가능합니다! g.addEdge ( "cherry", "apple", { "directed": true})를 사용하십시오.
Johann Philipp Strathausen

chart.js 및 chartnew.js 라이브러리도 추가해야합니다. 그리고 이것은 ( charts.livegap.com ) 그것을 위해 생성됩니다
Omar Sedki

1
Linkuroius.jsVivaGraphJS 와 같이 목록에 추가 할 수있는 주목할만한 라이브러리가 두 개 더 있습니다 .
카슈 K

2
yFILES 레이아웃 알고리즘에 대한 오픈 소스 대안이 있습니까? yworks.com/products/yfiles-layout-algorithms-for-cytoscape
Ryan Chou

1
나는 다른 사람에게 유용 할 수있는 무료 경량 라이브러리를 만들었어요 : github.com/n-yousefi/Arg-Graph
나세르 Yousefi

48

면책 조항 : 저는 Cytoscape.js의 개발자입니다

Cytoscape.js는 HTML5 그래프 시각화 라이브러리입니다. API는 정교하며 jQuery 규칙을 따릅니다.

  • 쿼리 및 필터링을위한 선택기 ( cy.elements("node[weight >= 50].someClass")예상 한만큼)
  • (예 : 체인 cy.nodes().unselect().trigger("mycustomevent"))
  • 이벤트에 바인딩하기위한 jQuery와 유사한 함수
  • jQuery에 HTMLDomElements 컬렉션이있는 것처럼 요소를 컬렉션으로
  • 확장 성 (사용자 정의 레이아웃, UI, 코어 및 컬렉션 기능 등 추가 가능),
  • 그리고 더.

그래프를 사용하여 심각한 웹앱을 작성하려는 경우 최소한 Cytoscape.js를 고려해야합니다. 무료이며 오픈 소스입니다.

http://js.cytoscape.org


6
모든 API가 완전히 문서화되었습니다. 문서는 심지어 시작하는 단계 (예 : init)를 안내합니다. 있습니다 또한 개별 API의 실행 예는, 라이브 데모가있다. 이 기능은 모든 JS 그래프 라이브러리보다 훨씬 뛰어나며 문서는 상업용이든 오픈 소스이든 대부분의 프로젝트보다 광범위합니다. 문서에서 정확히 당신에게 부족한 것은 무엇입니까?
maxkfranz

3
알았어, 미안해 나는 제대로 보이지 않았다. 예, 잘 문서화되어 있습니다.
Storm

그래프를 계층 적 순서로 레이아웃하는 방법이 있습니까 (나무처럼 보이는 레이아웃이지만 실제로는 여러 부모가있는 노드가 있음을 의미하는 그래프입니다)
Mina

이 경우 dagre와 너비 우선 레이아웃이 모두 작동합니다.
maxkfranz

드래그 앤 드롭 화살표 시작 끝과 끝 끝으로 그래프를 편집해야합니다. 이 도서관은 그런 것들이 불변이라고 말합니다. 그래서 다른 도서관을 찾아야합니다 ...
Eugene Gr. Philippov

35

JsVIS 는 꽤 좋았지 만 더 큰 그래프에서는 느리고 2007 년부터 포기되었습니다.

prefuse 는 Java에서 풍부한 대화식 데이터 시각화를 작성하기위한 소프트웨어 도구 세트입니다. flare 는 2012 년 이후 포기 된 Adobe Flash Player에서 실행되는 시각화를 만들기위한 ActionScript 라이브러리입니다.


2
이 라이브러리는이 시점에서 약간 오래된 것처럼 보입니다. 오늘날 사람들은 무엇을 사용하고 있습니까? 나는 독립적 인 xy 시리즈를 구체적으로 계획하고 있습니다.
blong

22
prefuse는 JavaScript가 아닌 Java입니다. 플레어는 플래시이며 JavaScript도 아닙니다. JSVIS는 버그가 많고 구식입니다.
anatoly techtonik

2
@animuson : 또 다른 논외 주제 : OP는 JavaScript 라이브러리를 요청했습니다. 답변에서 JS에 대한 유일한 부분은 2007 년 이후 개발되지 않은 라이브러리입니다.
Dan Dascalescu

10

상업적 시나리오에서 확실한 경쟁자는 HTML의 yFiles입니다 .

다음을 제공합니다.

  • 쉬운 수입 사용자 정의 데이터 ( 이 쌍방향 온라인 데모는 거의 정확하게 영업 이익은 무엇을 찾고 있었다 할 것 같다)
  • 사용자 제스처를 통해 다이어그램을 작성하고 조작하기위한 대화식 편집 (전체 편집기 참조 )
  • 라이브러리의 모든 측면을 사용자 정의 하기 위한 거대한 프로그래밍 API
  • 그룹화중첩 지원 (대화식 및 레이아웃 알고리즘을 통한)
  • 특정 UI 툴킷에 의존하지 않지만 거의 모든 기존 Javascript 툴킷으로의 통합 을 지원합니다 ( "통합"데모 참조 ).
  • 자동 레이아웃 ( "hierarchic", "organic", "orthogonal", "tree", "circular", "radial"등과 같은 다양한 스타일)
  • 자동 정교한 에지 라우팅 (장애 회피 기능이있는 직교 및 유기 에지 라우팅)
  • 증분 및 부분 레이아웃 (요소 추가 및 제거 및 다이어그램의 나머지 부분을 약간 또는 전혀 변경하지 않음)
  • 그룹화 및 중첩 지원 (대화식 및 레이아웃 알고리즘을 통한)
  • 구현 그래프 분석 알고리즘 (경로 centralities 네트워크 흐름 등)
  • SVG + CSS 및 Canvas와 같은 HTML 5 기술과 속성 및 기타 더 많은 ES5 및 ES6 기능을 활용하는 최신 Javascript를 사용합니다 (그러나 같은 이유로 IE 버전 8 이하에서는 실행되지 않음).
  • UMD 로더를 사용하여 주문형으로로드 할 수있는 모듈 식 API 사용

요청 된 기능의 대부분을 보여주는 샘플 렌더링은 다음과 같습니다.

BPMN 데모로 작성된 샘플 렌더링의 스크린 샷

전체 공개 : 저는 yWorks에서 근무하지만 Stackoverflow에서는 고용주를 대표하지 않습니다.


3
가장 좋은 알고리즘 모음이지만 가장 닫힌 알고리즘은 오픈 소스 프로젝트에서 사용할 수 없습니다. :-(
forresto

1
"최고의 컬렉션"아마 사실이지만, "가장 폐쇄"상대이며, "불가능"올바르지 않습니다 : 그것은 상용 라이센스의 오픈 소스 프로젝트가 사용 그렇게하지 않으면 바이러스 라이센스를 , 그것은 수 있습니다 오픈 소스 프로젝트에 사용. 물론 다른 오픈 소스 프로젝트에서 오픈 소스 프로젝트를 사용하는 것은 별 문제 되지 않습니다 ...
Sebastian

1
오픈 소스 작동 방식을 이해하지 못하는 것 같습니다. 귀사는 오픈 소스 프로젝트에 무한 개발자에게이 소프트웨어를 사용할 수있는 권리, 고정 된 일회성 비용으로 무한 개발자 및 제공자 및 테스터에게 배포 할 권리를 부여 할 수 있습니까? 물론 아닙니다 .
Félix Saparelli 2016 년

2
@ FélixSaparelli : 날 믿어. 당신이 설명하는 것은 가능하며 이전에도 비슷한 일들이 이루어졌습니다. 표준 라이센스 조항에 링크하고 있지만 물론 사용자 정의 계약이 가능하며 이전에 작성되었습니다. 그러나 이것은 이것을 논의하기에 적합한 장소가 아닙니다. yWorks에 직접 문의하십시오.
Sebastian

7

guruz가 언급했듯이 JIT 에는 매력적인 RGraph 및 HyperTree 시각화를 포함하여 몇 가지 멋진 그래프 / 트리 레이아웃이 있습니다.

또한 최신 브라우저에 표시되는 작은 그래프에 충분하게 작동하는 github (종속성 없음, ~ 125 LOC) 에서 매우 간단한 SVG 기반 구현을 방금했습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.