27

I looked thru Graphviz resources page , and questions 1 and 2 and still couldn't find specific answer. My usecase is browsing dependencies among software components (e.g. installable packages), and one particular trait with it is that some common nodes are targets for many edges. For example, almost every executable package depends on libc.

Based on that trait, I'd like to have viewer/library with following capabilities:

  1. Use Graphviz "dot" layout algorithm (force layout algos which are plenty in different libs don't provide good layout quality for the discussed usecase).
  2. Interactively disable/re-enable some node in a graph (libc example above).
  3. Interactively disable/re-enable all edged from a particular node (for example, libpng depends on libz, but that's obvious, and can be disabled to not clutter view).
  4. Re-root graph at some node (show subgraph with only nodes reachable from that node), and "zoom back" to complete graph.

Ideally, this would be a Javascript library, which would allow more complicated manipulation capabilities easily implemented. What's important that basic viewing behaviors as described above were available out of the box - again, I couldn't find something like that, with many solutions being either static viewers, or "freeform editors" allowing to drag nodes around, but not something with sufficiently high-level and useful behaviors.

Finally, if such solution doesn't exist, suggestions for the best framework to implement those features are welcome.

Community
  • 1
  • 1
pfalcon
  • 6,724
  • 4
  • 35
  • 43

2 Answers2

20

Gephi, https://gephi.org/, it supports many graph formats, of course, including Graphviz dot. It can filter nodes or edges and has some kind of analysis functions.

frankli22586
  • 710
  • 6
  • 19
9

I found José Fonseca's xdot.py to be extremely cool Python and Cairo based application for viewing Graphviz files. It so well written and has so nice UI that one may wonder why it is a bit adhoc in its interaction support, not allowing for more extensibility out of the box. I'm currently hacking on it at https://github.com/pfalcon/xdot.py

Update: I committed proof of concept implementation of the features above as filtered-viewer.py . Likely to be renamed later.

ulidtko
  • 14,740
  • 10
  • 56
  • 88
pfalcon
  • 6,724
  • 4
  • 35
  • 43