ห้องสมุดการสร้างภาพกราฟในจาวาสคริปต์


523

ฉันมีโครงสร้างข้อมูลที่แสดงกราฟกำกับและฉันต้องการแสดงผลแบบไดนามิกในหน้า HTML กราฟเหล่านี้มักจะเป็นเพียงไม่กี่โหนดอาจเป็นสิบที่ปลายบนสุดดังนั้นฉันเดาว่าประสิทธิภาพจะไม่เป็นเรื่องใหญ่ โดยหลักการแล้วฉันต้องการเชื่อมต่อกับ jQuery เพื่อให้ผู้ใช้สามารถปรับแต่งเลย์เอาต์ด้วยตนเองโดยการลากโหนดรอบ ๆ

หมายเหตุ: ฉันไม่ได้กำลังมองหาไลบรารีแผนภูมิ


คำตอบ:


923

ฉันเพิ่งรวบรวมสิ่งที่คุณอาจมองหา: http://www.graphdracula.net

มันเป็นจาวาสคริปต์ที่มีการจัดวางกราฟโดยตรง SVG และคุณสามารถลากโหนดไปมาได้ ยังคงต้องการการปรับแต่ง แต่สามารถใช้งานได้อย่างสมบูรณ์ คุณสร้างโหนดและขอบอย่างง่ายดายด้วยรหัส JavaScript เช่นนี้:

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

ฉันใช้ไลบรารี Raphael JS ที่กล่าวถึงก่อนหน้านี้ (ตัวอย่าง graffle) บวกกับโค้ดบางส่วนสำหรับอัลกอริทึมการจัดวางกราฟแรงที่ฉันพบในเน็ต หากคุณมีข้อสังเกตหรือต้องการคุณสมบัติบางอย่างฉันอาจใช้มันเพียงแค่ถาม!


คุณอาจต้องการดูโครงการอื่นด้วย! ด้านล่างมีการเปรียบเทียบเมตาสองรายการ:

  • SocialCompareมีรายการห้องสมุดมากมายและบรรทัด "Node / edge กราฟ" จะกรองภาพกราฟ

  • DataVisualization.ch ได้ทำการประเมินหลายไลบรารีรวมถึงโหนด / กราฟ น่าเสียดายที่ไม่มีลิงก์โดยตรงดังนั้นคุณจะต้องกรอง "กราฟ":การเลือก DataVisualization.ch

นี่คือรายการของโครงการที่คล้ายกัน (บางส่วนได้รับการกล่าวถึงที่นี่):

ไลบรารี JavaScript ที่แท้จริง

  • vis.jsรองรับกราฟเครือข่าย / ขอบหลายประเภทรวมถึงไทม์ไลน์และแผนภูมิ 2D / 3D เลย์เอาต์อัตโนมัติ, การจัดกลุ่มอัตโนมัติ, เอ็นจิ้นฟิสิกส์สปริง, เป็นมิตรกับมือถือ, การนำทางคีย์บอร์ด, เลย์เอาต์ลำดับชั้น, แอนิเมชั่นและอื่น ๆMIT ได้รับอนุญาตและพัฒนาโดย บริษัท ชาวดัตช์ที่เชี่ยวชาญด้านการวิจัย

  • Cytoscape.js - การวิเคราะห์กราฟแบบอินเทอร์แอคทีฟและการสร้างภาพด้วยการรองรับอุปกรณ์เคลื่อนที่ตามอนุสัญญา jQuery ได้รับทุนจาก NIH ทุนและพัฒนาโดย@maxkfranz (ดูคำตอบของเขาด้านล่าง ) ด้วยความช่วยเหลือจากมหาวิทยาลัยหลายแห่งและองค์กรอื่น ๆ

  • JavaScript InfoVis Toolkit - Jit การวาดกราฟเชิงโต้ตอบและโครงร่างเค้าโครง ดูตัวอย่างผ่อนชำระต้นไม้ สร้างโดยสถาปนิกดาต้าดาวิซของNicolas Garcia Belmonteและซื้อโดย Senchaในปี 2010

  • D3.jsไลบรารีการสร้างภาพ JS อเนกประสงค์ที่มีประสิทธิภาพผู้สืบทอดของ Protovis ดูกราฟแรงกำกับตัวอย่างและตัวอย่างกราฟอื่น ๆ ในแกลเลอรี่

  • ไลบรารีการสร้างภาพ JS ของ Plotlyใช้ D3.js กับการผูก JS, Python, R และ MATLAB ดูตัวอย่าง nexworkx ใน IPython นี่ตัวอย่างปฏิสัมพันธ์ของมนุษย์ที่นี่และJS ฝัง API

  • sigma.jsไลบรารี่ที่มีน้ำหนักเบา แต่ทรงพลังสำหรับการวาดกราฟ

  • jsPlumb jQuery ปลั๊กอินสำหรับการสร้างกราฟที่เชื่อมต่อแบบโต้ตอบ

  • Springy - อัลกอริทึมเค้าโครงกราฟบังคับทิศทาง

  • กำลังประมวลผลพอร์ต Javascript ของไลบรารีการประมวลผลโดย John Resig

  • JS Graph It - กล่อง drag'n'drop เชื่อมต่อกันด้วยเส้นตรง เค้าโครงอัตโนมัติน้อยที่สุดของบรรทัด

  • Graffle ของ RaphaelJS - ตัวอย่างกราฟเชิงโต้ตอบของไลบรารีวาดภาพเวกเตอร์เอนกประสงค์ทั่วไป RaphaelJS ไม่สามารถจัดวางโหนดได้โดยอัตโนมัติ คุณจะต้องมีห้องสมุดอื่นสำหรับสิ่งนั้น

  • JointJS Core - ไลบรารีไดอะแกรมโอเพนซอร์สแบบลิขสิทธิ์ MPL ของ David Durman สามารถใช้เพื่อสร้างไดอะแกรมแบบคงที่หรือเครื่องมือสร้างไดอะแกรมแบบโต้ตอบอย่างสมบูรณ์และผู้สร้างแอปพลิเคชัน ทำงานได้ในเบราว์เซอร์ที่รองรับ SVG อัลกอริทึมเค้าโครงไม่รวมอยู่ในแพ็คเกจหลัก

  • mxGraphไลบรารีไดอะแกรมเชิงพาณิชย์ HTML 5 ก่อนหน้านี้มีให้ใช้ภายใต้ Apache v2.0 mxGraph เป็นห้องสมุดฐานที่ใช้ในการdraw.io

ห้องสมุดพาณิชย์

ห้องสมุดที่ถูกทิ้งร้าง

  • Cytoscape Web Viewer เครือข่าย JS แบบฝังได้ (ไม่มีการวางแผนคุณสมบัติใหม่; ประสบความสำเร็จโดย Cytoscape.js)

  • Canviz JS rendererสำหรับกราฟ Graphviz ถูกทอดทิ้งในเดือนกันยายน 2013

  • arbor.js การทำกราฟอย่างพิถีพิถันด้วยฟิสิกส์และขนมตา ถูกปล่อยปละละเลยในเดือนพฤษภาคม 2555 มีส้อมไว้หลายกึ่ง

  • jssvggraph "อัลกอริธึมการวางผังกราฟบังคับง่ายที่สุดที่เป็นไปได้นำมาใช้เป็นไลบรารี Javascript ที่ใช้วัตถุ SVG" ถูกทอดทิ้งในปี 2555

  • แอปพลิเคชันการวาดกราฟฝั่งไคลเอ็นต์jsdot ที่ถูกทิ้งร้างในปี 2011

  • ชุดเครื่องมือกราฟิกProtovisสำหรับการสร้างภาพ (JavaScript) ถูกแทนที่ด้วย d3

  • การเป็นตัวแทน JS ของMoo Wheel Interactive สำหรับการเชื่อมต่อและความสัมพันธ์ (2008)

  • JSViz 2007 กราฟแสดงภาพประกอบกราฟของสคริปต์

  • dagre Graph layout สำหรับ JavaScript

ไลบรารีที่ไม่ใช่ Javascript


4
ใช่ขอบเป็นไปได้! ใช้ g.addEdge ("เชอร์รี่", "แอปเปิ้ล", {"กำกับ": จริง});
Johann Philipp Strathausen

จำเป็นต้องเพิ่มไลบรารี chart.js & chartnew.js ด้วย และนี่ ( charts.livegap.com ) สร้างขึ้นเพื่อมัน
Omar Sedki

1
มีสองห้องสมุดที่สำคัญอื่น ๆ ที่สามารถจะเพิ่มรายชื่อคือมีLinkuroius.jsและVivaGraphJS
Łukasz K

2
มีทางเลือกโอเพ่นซอร์สสำหรับอัลกอริธึมโครงร่าง yFILES หรือไม่? เช่นyworks.com/products/yfiles-layout-algorithms-for-cytoscape
Ryan Chou

1
ฉันได้สร้างห้องสมุดฟรีและมีน้ำหนักเบาซึ่งอาจเป็นประโยชน์ต่อผู้อื่น: github.com/n-yousefi/Arg-Graph
Naser Yousefi

48

ข้อจำกัดความรับผิดชอบ: ฉันเป็นผู้พัฒนา Cytoscape.js

Cytoscape.js เป็นห้องสมุดสร้างภาพกราฟ HTML5 API มีความซับซ้อนและเป็นไปตามอนุสัญญา jQuery รวมถึง

  • ตัวเลือกสำหรับการสืบค้นและการกรอง ( cy.elements("node[weight >= 50].someClass")ทำเท่าที่คุณต้องการ)
  • การผูกมัด (เช่นcy.nodes().unselect().trigger("mycustomevent"))
  • ฟังก์ชั่นที่เหมือน jQuery สำหรับเชื่อมโยงกับเหตุการณ์
  • องค์ประกอบเป็นชุด (เช่น jQuery มีชุดของ HTMLDomElements)
  • ความสามารถในการขยาย (สามารถเพิ่มเลย์เอาต์ที่กำหนดเอง, UI, คอร์ & ฟังก์ชันคอลเลกชันและอื่น ๆ )
  • และอื่น ๆ.

หากคุณกำลังคิดที่จะสร้าง webapp อย่างจริงจังด้วยกราฟคุณควรพิจารณา Cytoscape.js อย่างน้อย ฟรีและโอเพ่นซอร์ส:

http://js.cytoscape.org


6
API ทั้งหมดมีเอกสารครบถ้วน เอกสารจะช่วยให้คุณเริ่มต้นได้ง่ายขึ้น (เช่น init) นอกจากนี้ยังมีตัวอย่างการใช้งานสำหรับแต่ละ APIs และมีการสาธิตสด ฟังก์ชั่นนี้อยู่เหนือกว่า lib กราฟ JS ใด ๆ และเอกสารนั้นมีความครอบคลุมมากกว่าโครงการส่วนใหญ่ สิ่งที่ขาดหายไปสำหรับคุณในเอกสารคืออะไร?
maxkfranz

3
โอเคขอโทษฉันไม่ดี ฉันดูไม่ถูกต้อง ใช่มันเป็นเอกสารที่ดี
พายุ

มันมีวิธีการรูปแบบกราฟในลำดับชั้น (รูปแบบที่มีลักษณะเหมือนต้นไม้ แต่ในความเป็นจริงกราฟความหมายมีโหนดกับผู้ปกครองหลาย)
Mina

ทั้ง dagre และรูปแบบ breadthfirst ทำงานในกรณีนั้น
maxkfranz

ฉันต้องแก้ไขกราฟด้วยการลากลูกศรลงเพื่อเริ่มต้นสิ้นสุดและสิ้นสุด ห้องสมุดนี้บอกว่าสิ่งเหล่านั้นไม่เปลี่ยนรูป ดังนั้นฉันต้องหาห้องสมุดอื่น ...
Eugene Gr. Philippov

35

JsVISค่อนข้างดี แต่ช้ากว่าด้วยกราฟที่ใหญ่กว่าและถูกยกเลิกไปตั้งแต่ปี 2550

prefuseเป็นชุดเครื่องมือซอฟต์แวร์สำหรับสร้างการสร้างภาพข้อมูลเชิงโต้ตอบที่สมบูรณ์ใน Java flare เป็นไลบรารี ActionScript สำหรับสร้างภาพข้อมูลที่ทำงานใน Adobe Flash Player ซึ่งถูกละทิ้งตั้งแต่ปี 2012


2
ณ จุดนี้ห้องสมุดเหล่านี้ดูเก่าไปหน่อยผู้คนใช้อะไรกันในวันนี้? ฉันกำลังมองหาการวางแผนชุด xy อิสระ
blong

22
-1 - prefuse คือ Java ไม่ใช่ JavaScript Flare เป็น Flash ไม่ใช่ JavaScript JsVIS เป็นบั๊กกี้และล้าสมัยแล้ว
Anatoly techtonik

2
@animuson: อีกหนึ่งหัวข้อนอก: OP กำลังขอไลบรารี JavaScript เฉพาะส่วนที่เกี่ยวกับ JS ในคำตอบที่เป็นห้องสมุดที่ไม่ได้รับการพัฒนามาตั้งแต่ปี 2007
แดนดาสคเลสุ

10

ในสถานการณ์เชิงพาณิชย์ผู้แข่งขันที่จริงจังอย่างแน่นอนคือyFiles สำหรับ HTML :

มันมี:

  • นำเข้าข้อมูลที่กำหนดเองได้ง่าย( ตัวอย่างออนไลน์เชิงอินเทอร์แอคทีฟนี้ดูเหมือนว่าจะทำสิ่งที่ OP ต้องการอย่างแท้จริง)
  • การแก้ไขเชิงโต้ตอบสำหรับการสร้างและจัดการไดอะแกรมผ่านท่าทางของผู้ใช้ (ดูตัวแก้ไขทั้งหมด)
  • API การเขียนโปรแกรมขนาดใหญ่สำหรับปรับแต่งทุกด้านของไลบรารี
  • รองรับการจัดกลุ่มและซ้อนกัน (ทั้งแบบอินเทอร์แอคทีฟและอัลกอริธึมเลย์เอาต์)
  • ไม่ได้ขึ้นอยู่กับชุดเครื่องมือ UI specfic แต่สนับสนุนการรวมเข้ากับชุดเครื่องมือ Javascript ที่มีอยู่เกือบทั้งหมด (ดูการสาธิต "การรวม" )
  • เลย์เอาต์อัตโนมัติ (รูปแบบต่าง ๆ เช่น "ลำดับชั้น", "อินทรีย์", "มุมฉาก", "ต้นไม้", "วงกลม", "รัศมี" และอื่น ๆ )
  • การกำหนดเส้นทางขอบอัตโนมัติที่ซับซ้อน (การจัดเส้นทางแบบมุมฉากและแบบออร์แกนิกพร้อมการหลีกเลี่ยงสิ่งกีดขวาง)
  • รูปแบบที่เพิ่มขึ้นและบางส่วน (การเพิ่มและลบองค์ประกอบและเพียงเล็กน้อยหรือไม่เลยเปลี่ยนส่วนที่เหลือของแผนภาพ)
  • รองรับการจัดกลุ่มและซ้อนกัน (ทั้งแบบอินเทอร์แอคทีฟและอัลกอริธึมเลย์เอาต์)
  • การใช้งานของอัลกอริทึมการวิเคราะห์กราฟ (เส้นทาง, ศูนย์กลาง, กระแสเครือข่าย, ฯลฯ )
  • ใช้เทคโนโลยี HTML 5 เช่น SVG + CSS และ Canvas และคุณสมบัติการใช้ประโยชน์จาก Javascript สมัยใหม่และคุณสมบัติอื่น ๆ ของ ES5 และ ES6 (แต่ด้วยเหตุผลเดียวกันนี้จะไม่ทำงานใน IE เวอร์ชัน 8 และต่ำกว่า)
  • ใช้ API แบบแยกส่วนที่สามารถโหลดได้ตามต้องการโดยใช้ตัวโหลด UMD

นี่คือตัวอย่างการแสดงผลที่แสดงคุณสมบัติส่วนใหญ่ที่ร้องขอ:

สกรีนช็อตของการเรนเดตัวอย่างตัวอย่างที่สร้างโดยการสาธิต BPMN

การเปิดเผยแบบเต็ม: ฉันทำงานให้กับ yWorks แต่ใน Stackoverflow ฉันไม่ได้เป็นตัวแทนของนายจ้างของฉัน


3
คอลเลกชันที่ดีที่สุดของอัลกอริทึม แต่ยังปิดมากที่สุดทำให้เป็นไปไม่ได้ที่จะใช้ในโครงการโอเพนซอร์ซ :-(
forresto

1
"คอลเลกชันที่ดีที่สุด" อาจจะเป็นความจริง แต่ "ปิดมากที่สุด" เป็นญาติและ "เป็นไปไม่ได้" ไม่ถูกต้อง: มันเป็นใบอนุญาตการค้าดังนั้นถ้าโครงการเปิดแหล่งที่มาใช้ใบอนุญาตไวรัสก็สามารถนำมาใช้ในโครงการโอเพนซอร์ส แน่นอนโดยใช้โครงการโอเพนซอร์สในโครงการอื่น ๆ เปิดแหล่งที่มาเป็นปัญหาน้อย ...
เซบาสเตียน

1
คุณดูเหมือนจะไม่เข้าใจว่าโอเพนซอร์สทำงานอย่างไร คุณกำลังบอกว่า บริษัท ของคุณสามารถให้สิทธิ์แก่โครงการโอเพนซอร์ซในการใช้ซอฟต์แวร์นี้สำหรับนักพัฒนาที่ไม่มีที่สิ้นสุดสิทธิ์ในการเผยแพร่ให้กับนักพัฒนาที่ไม่มีที่สิ้นสุดและผู้มีส่วนร่วมและผู้ทดสอบ ไม่แน่นอน
Félix Saparelli

2
@ FélixSaparelli: เชื่อฉัน: ฉันทำ สิ่งที่คุณอธิบายเป็นไปได้และสิ่งที่คล้ายกันได้ทำมาก่อน คุณกำลังเชื่อมโยงไปยังข้อกำหนดสิทธิการใช้งานมาตรฐาน แต่แน่นอนว่าข้อตกลงที่กำหนดเองนั้นเป็นไปได้และได้ทำมาก่อน แม้ว่านี่ไม่ใช่สถานที่ที่เหมาะสมที่จะพูดคุยเกี่ยวกับเรื่องนี้ อย่าลังเลที่จะติดต่อ yWorks โดยตรง
เซบาสเตียน

7

ดังที่กูรูซกล่าวถึงJITมีรูปแบบกราฟ / ต้นไม้ที่น่ารักหลายรูปแบบรวมถึงการสร้างภาพ RGraph และ HyperTree ที่น่าดึงดูดใจ

นอกจากนี้ฉันเพิ่งจะติดตั้งระบบ SVG แบบง่าย ๆที่ gitHub (ไม่ต้องพึ่งพา ~ 125 LOC) ที่ควรจะทำงานได้ดีพอสำหรับกราฟขนาดเล็กที่แสดงในเบราว์เซอร์สมัยใหม่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.