Libreria di visualizzazione di grafici in JavaScript


523

Ho una struttura di dati che rappresenta un grafico diretto e voglio renderlo dinamicamente su una pagina HTML. Questi grafici di solito sono solo alcuni nodi, forse dieci nella parte più alta, quindi la mia ipotesi è che le prestazioni non saranno un grosso problema. Idealmente, vorrei essere in grado di collegarlo con jQuery in modo che gli utenti possano modificare manualmente il layout trascinando i nodi.

Nota: non sto cercando una biblioteca per grafici.


Risposte:


923

Ho appena messo insieme quello che potresti cercare: http://www.graphdracula.net

È JavaScript con layout grafico diretto, SVG e puoi persino trascinare i nodi. Ha ancora bisogno di qualche modifica, ma è totalmente utilizzabile. Crea nodi e bordi facilmente con il codice JavaScript in questo modo:

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

Ho usato la libreria Raphael JS precedentemente citata (l'esempio graffle) più un po 'di codice per un algoritmo di layout grafico basato sulla forza che ho trovato in rete (tutto open source, licenza MIT). Se hai qualche commento o hai bisogno di una certa funzionalità, potrei implementarla, basta chiedere!


Potresti voler dare un'occhiata anche ad altri progetti! Di seguito sono riportati due meta-confronti:

  • SocialCompare ha un ampio elenco di librerie e la riga "Nodo / bordo grafico" filtra per quelle di visualizzazione del grafico.

  • DataVisualization.ch ha valutato molte biblioteche, comprese quelle di nodi / grafici. Sfortunatamente non esiste un collegamento diretto, quindi dovrai filtrare per "grafico":Selection DataVisualization.ch

Ecco un elenco di progetti simili (alcuni sono già stati menzionati qui):

Librerie JavaScript pure

  • vis.js supporta molti tipi di grafici di rete / bordi, oltre a linee temporali e grafici 2D / 3D. Auto-layout, auto-clustering, motore fisico elastico, ottimizzazione per dispositivi mobili, navigazione da tastiera, layout gerarchico, animazione, ecc. MIT concesso in licenza e sviluppato da una società olandese specializzata nella ricerca su reti auto-organizzanti.

  • Cytoscape.js - analisi e visualizzazione di grafici interattivi con supporto mobile, seguendo le convenzioni jQuery. Finanziato tramite sovvenzioni NIH e sviluppato da @maxkfranz (vedi la sua risposta sotto ) con l'aiuto di diverse università e altre organizzazioni.

  • JavaScript InfoVis Toolkit - Jit, un framework interattivo di disegno grafico e layout multiuso. Vedi ad esempio l' albero iperbolico . Costruito dall'architetto dataviz di Twitter Nicolas Garcia Belmonte e acquistato da Sencha nel 2010.

  • D3.js Potente libreria di visualizzazione JS multiuso, il successore di Protovis. Vedi l' esempio del grafico a forza forzata e altri esempi di grafici nella galleria .

  • La libreria di visualizzazione JS di Plotly utilizza D3.js con i collegamenti JS, Python, R e MATLAB. Vedi un esempio di Nexworkx in IPython qui , esempio di interazione umana qui e JS Embed API .

  • sigma.js Libreria leggera ma potente per disegnare grafici

  • jsPlumb Plug-in jQuery per la creazione di grafici connessi interattivi

  • Springy - un algoritmo di layout grafico orientato alla forza

  • Processing.js porto Javascript della libreria di elaborazione da John Resig

  • JS Graph It : trascina le caselle collegate da linee rette. Disposizione automatica minima delle linee.

  • RaphaelJS's Graffle - esempio grafico interattivo di una libreria di disegno vettoriale multiuso generica. RaphaelJS non può impaginare automaticamente i nodi; avrai bisogno di un'altra biblioteca per quello.

  • JointJS Core - Libreria di diagrammi open source con licenza MPL di David Durman. Può essere utilizzato per creare diagrammi statici o strumenti di creazione diagrammi completamente interattivi e costruttori di applicazioni. Funziona con browser che supportano SVG. Algoritmi di layout non inclusi nel pacchetto principale

  • mxGraph Libreria di diagrammi HTML 5 precedentemente commerciale, ora disponibile in Apache v2.0. mxGraph è la libreria di base utilizzata in draw.io .

Biblioteche commerciali

Biblioteche abbandonate

  • Visualizzatore di JS Network di Cytoscape Web Embeddable (nessuna nuova funzionalità pianificata; riuscita da Cytoscape.js)

  • Canviz JS renderer per i grafici GraphViz. Abbandonato nel settembre 2013.

  • arbor.js Grafica sofisticata con bella fisica e piacere per gli occhi. Abbandonato nel maggio 2012. Esistono diverse forche semi-mantenute .

  • jssvggraph "Il più semplice possibile algoritmo di layout grafico diretto forzato implementato come libreria Javascript che utilizza oggetti SVG". Abbandonato nel 2012.

  • jsdot Applicazione di disegno grafico lato client. Abbandonato nel 2011 .

  • Protovis Graphical Toolkit for Visualization (JavaScript). Sostituito da d3.

  • Rappresentazione MoS Wheel Interactive JS per connessioni e relazioni (2008)

  • Script di visualizzazione dei grafici dell'era 2007 di JSViz

  • dagre Layout grafico per JavaScript

Librerie non Javascript

  • Graphviz Linguaggio di visualizzazione grafico sofisticato

  • Flare Bello e potente disegno grafico basato su Flash

  • Visualizzazione del grafico NodeBox Python


4
Sì, i bordi diretti sono possibili! Usa g.addEdge ("ciliegia", "mela", {"diretto": vero});
Johann Philipp Strathausen,

è necessario aggiungere anche la libreria chart.js e chartnew.js. e questo ( chart.livegap.com ) è generato per questo
Omar Sedki

1
Ci sono altre due librerie degne di nota che possono essere aggiunte all'elenco, vale a dire Linkuroius.js e VivaGraphJS .
Łukasz K,

2
Esiste un'alternativa open source per l'algoritmo di layout yFILES? Come yworks.com/products/yfiles-layout-algorithms-for-cytoscape
Ryan Chou,

1
Ho realizzato una libreria gratuita e leggera che può essere utile per gli altri: github.com/n-yousefi/Arg-Graph
Naser Yousefi

48

Disclaimer: sono uno sviluppatore di Cytoscape.js

Cytoscape.js è una libreria di visualizzazione di grafici HTML5. L'API è sofisticata e segue le convenzioni jQuery, incluso

  • selettori per query e filtri ( cy.elements("node[weight >= 50].someClass")fa tutto ciò che ti aspetteresti),
  • concatenamento (ad es. cy.nodes().unselect().trigger("mycustomevent")),
  • Funzioni simili a jQuery per l'associazione ad eventi,
  • elementi come raccolte (come jQuery ha raccolte di HTMLDomElements),
  • estensibilità (può aggiungere layout personalizzati, interfaccia utente, funzioni core e di raccolta e così via),
  • e altro ancora

Se stai pensando di creare una webapp seria con grafici, dovresti almeno considerare Cytoscape.js. È gratuito e open-source:

http://js.cytoscape.org


6
Tutte le API sono completamente documentate. I documenti ti guidano persino all'inizio (es. Init). Esistono anche esempi in esecuzione per le singole API e dimostrazioni dal vivo. La funzionalità è di gran lunga superiore a qualsiasi lib grafica di JS e i documenti sono più estesi della maggior parte dei progetti, sia commerciali che open source. Cosa ti manca esattamente nei documenti?
maxkfranz,

3
Ok, scusa il mio male. Non ho guardato bene. Sì, è ben documentato.
Tempesta

Ha un modo per disporre i grafici in un ordine gerarchico (un layout che assomiglia ad un albero ma in realtà è un grafico, nel senso che ci sono nodi con più genitori)
Mina

Sia il dagre che il primo layout funzionano per quel caso
maxkfranz,

Ho bisogno di modificare il grafico con il trascinamento delle frecce inizio e fine. Questa biblioteca dice che queste cose sono immutabili. Quindi devo cercare un'altra biblioteca ...
Eugene Gr. Philippov,

35

JsVIS è stato molto carino, ma lento con grafici più grandi, ed è stato abbandonato dal 2007.

prefuse è un insieme di strumenti software per la creazione di visualizzazioni di dati interattivi avanzati in Java. flare è una libreria ActionScript per la creazione di visualizzazioni eseguite in Adobe Flash Player, abbandonata dal 2012.


2
Queste librerie sembrano un po 'vecchie a questo punto, cosa usano le persone oggi? In particolare, sto studiando la trama di serie xy indipendenti.
blong,

22
-1 - il prefuso è Java, non JavaScript. Flare è Flash, anche non JavaScript. JsVIS è difettoso e obsoleto.
Anatoly Techtonik,

2
@animuson: un altro fuori tema: OP stava chiedendo librerie JavaScript. L'unica parte di JS nella risposta è una libreria che non è stata sviluppata dal 2007.
Dan Dascalescu,

10

In uno scenario commerciale, un concorrente serio è sicuramente yFiles per HTML :

Offre:

  • Importazione semplice di dati personalizzati ( questa demo online interattiva sembra praticamente fare esattamente ciò che l'OP stava cercando)
  • Modifica interattiva per la creazione e la manipolazione dei diagrammi tramite gesti dell'utente (vedi l' editor completo )
  • Un'enorme API di programmazione per personalizzare ogni aspetto della libreria
  • Supporto per raggruppamento e annidamento (sia interattivo che tramite algoritmi di layout)
  • Non dipende da un toolkit specifico dell'interfaccia utente, ma supporta l' integrazione in quasi tutti i toolkit Javascript esistenti (vedere le demo "di integrazione" )
  • Layout automatico (vari stili, come "gerarchico", "organico", "ortogonale", "albero", "circolare", "radiale" e altro)
  • Instradamento dei bordi sofisticato automatico (orlatura ortogonale e organica con prevenzione degli ostacoli)
  • Layout incrementale e parziale (aggiunta e rimozione di elementi e modifica solo leggermente o per nulla del resto del diagramma)
  • Supporto per raggruppamento e annidamento (sia interattivo che tramite algoritmi di layout)
  • Implementazione di algoritmi di analisi dei grafici (percorsi, centralità, flussi di rete, ecc.)
  • Utilizza tecnologie HTML 5 come SVG + CSS e Canvas e le moderne proprietà di sfruttamento di Javascript e altre funzionalità ES5 ed ES6 (ma per lo stesso motivo non funzioneranno con IE versione 8 e precedenti).
  • Utilizza un'API modulare che può essere caricata su richiesta utilizzando i caricatori UMD

Ecco un rendering di esempio che mostra la maggior parte delle funzionalità richieste:

Schermata di un rendering di esempio creato dalla demo di BPMN.

Informativa completa: lavoro per yWorks, ma su Stackoverflow non rappresento il mio datore di lavoro.


3
La migliore raccolta di algoritmi, ma anche la più chiusa, che ne rende impossibile l'utilizzo in progetti open-source :-(
forresto

1
La "migliore raccolta" è probabilmente vera, ma "la maggior parte chiusa" è relativa e "impossibile" non è corretta: è una licenza commerciale, quindi a meno che il progetto open source non utilizzi una licenza virale , può essere utilizzato in progetti open source. Ovviamente l'utilizzo di progetti open source in altri progetti open source è meno problematico ...
Sebastian

1
Sembra che tu non capisca come funziona l'open source. Stai dicendo che la tua azienda può concedere a un progetto open source il diritto di utilizzare questo software per infiniti sviluppatori, il diritto di distribuirlo a infiniti sviluppatori, collaboratori e tester, per un costo fisso una tantum? Certo che no .
Félix Saparelli,

2
@ FélixSaparelli: Credimi: lo faccio. Ciò che descrivi è possibile e cose simili sono state fatte in precedenza. Stai collegando i termini di licenza standard, ma ovviamente sono possibili accordi personalizzati che sono stati stipulati in precedenza. Questo non è il posto giusto per discuterne, però. Sentiti libero di contattare direttamente yWorks.
Sebastian

7

Come ha detto guruz, JIT ha diversi layout grafici / ad albero, tra cui visualizzazioni RGraph e HyperTree piuttosto allettanti.

Inoltre, ho appena implementato un'implementazione super-semplice basata su SVG su github (nessuna dipendenza, ~ 125 LOC) che dovrebbe funzionare abbastanza bene per i piccoli grafici visualizzati nei browser moderni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.