Making this issue to track my thoughts on various graph visualization libraries.
Features I need:
- force directed (physics-based) layout
- ability to tweak behavior and strength of physics forces
- completely customizable node and edge appearance
- node dragging
- ability to pan and zoom view of scene
- ability to fit view to content
- ability to save (and thus render) as svg
Features that would be nice to have:
- ability to switch between svg, canvas, and webgl rendering
d3
Renders: svg
Documentation: comprehensive, but often obtuse
Examples/Tutorials: abundant, both by library authors and community
Functionality: best in industry
Performance: good
Complexity: very obtuse and unintuitive. chain syntax is not great. view and click handlers are confusing. call vs on and events are confusing
Popularity: 89.7k ⭐
vega
Renders: svg, canvas
Documentation: mostly comprehensive, but organized somewhat poorly (important concepts are often buried where you don't expect them) and sometimes worded poorly/confusingly
Example/Tutorials: decent amount, but maybe 1/10th of d3's
Functionality: good, with some exceptions. can do most of what d3 can do. can't do force directed layout + pan/zoom
Performance: okay
Complexity: easy to understand and much simpler than d3. quicker to write and simpler to read spec.json than d3's chaining syntax
Popularity: 8.1k ⭐
cytoscapejs
Renders: canvas
Documentation: okay
Example/Tutorials: good
Functionality: can do what i need, but doesn't support svg. some customization might be harder than it should
Performance: good
Complexity: seems a bit simpler than d3
Popularity: 6.3k ⭐
sigmajs
Renders: canvas, webgl
Documentation: decent but seems to be missing some info
Example/Tutorials: decent amount
Functionality: can do what i need, but doesn't support svg and customizing appearance might be painful
Performance: good
Complexity: customizing appearance requires completely overriding render function for an object and drawing it manually with canvas
Popularity: 8.8k ⭐
vivagraphjs
Renders: svg, webgl
Documentation: almost non-existent. will likely have to dig through source code
Example/Tutorials: there's lots of examples of different graph shapes and how the different force layout algorithms behave, but not much beyond that (like how to style things, how to handle user interaction, etc)
Functionality: style seems to be fully customizable. several advanced force layout algorithms (that i don't think even d3 has)
Performance: best in industry with webgl
Complexity: seems like slightly better than d3
Popularity: 3.1k ⭐