In my prototype for Vocabulary/Population Visualization I’ve been trying to use http://js.cytoscape.org/, which is a very amazing, open-source graph theory visualization library in many ways, but it only renders in Canvas, not SVG, which is great for performance in large graphs, and they’ve managed to give it impressive interactivity features despite the lack of distinct DOM elements for nodes and edges – still, it severely hampers the ability to extend interactive functionality and the high performance you get with Canvas isn’t necessary for the vocab use case.
It is likely that my prototype will need to be rewritten at some point to fit into ATLAS and other OHDSI toolsets, but that job will not be nearly so bad if the graph visualization library doesn’t have to be replaced.
Here are my requirements at the moment:
- Not a force directed layout. Most D3 graph renderers use force directed layouts, but I need node placement to be stable and consistent.
- Grid or manual layout instead. (I’ve already got an ok algorithm for placing nodes in rows and columns.)
- Good edge bundling and routing. Actually, cytoscape.js is not working for me in this regard and I’m wondering whether I couldn’t do better with plain D3.
- SVG rendering. I need to be able to zoom and drill on hover and click.
My guess is that if we have a decent graph library, developers may end up using it for things other than the vocab visualization. Does anyone have suggestions?
P.S. I had forgotten about http://sigmajs.org/. That might be a good alternative. Still eager for input if anyone has opinions.
P.P.S. Sigma.js doesn’t do SVG either.
P.P.P.S. Actually, maybe it does.
P.P.P.P.S. Here’s a list of graph-drawing libraries: We Love Graphs: JavaScript Graph Drawing Libraries