A good network graph library for language X

graphgraph-theorylanguage-agnostic

I have noticed that a recurring question is: “What is a good network graph library for language X”. I have played with quite a few of the libraries and I can share my experiences with you.

Python:
NetworkX is a robust library which has built-in visualization but also has an interface to Graphviz using pyGraphviz. (pyGraphviz and NetworkX are written by the same author). NetworkX is open source and a very easy to use.

Perl:
Circos is developed to visualize genomes and other highly complex datasets. It will always use a circular layout but that it often the most appropriate layout if your network is really large and its ‘modularity’ score is low. Circos is open source.

.Net:
NodeXL is developed by Microsoft Research and is both an add-on for Excel and a .Net 3.5 library. It’s pretty open (for Microsoft’s standards) and uses Fruchterman-Reingold algorithm for visualization.

Java:
JUNG2 has recently been released and is also a robust library. Has extended visualization and key metrics support. JUNG2 is open source.

UbiGraph:
UbiGraph has interfaces to different languages including Python (and NetworkX has UbiGraph support), Ruby, PHP, Java, C, C++, C#, Haskell, and OCaml. It has very neat 3D visualization of network graphs using an XML-RPC server. The basic version is free, you have to pay for the professional version.

Standalone:
You can always use an off-the-shelf package such as: Graphviz (Win, Linux, OSX), Pajek (Win), UCINET (Win), or even Visio (Win).

I am sure there are many more packages, but these are the ones that I have used myself. What other libraries or packages are available?

Best Answer

You should add graph-tool to the python list. It is very complete, and it is implemented in C++, with the Boost Graph Library, making it orders of magnitude faster than python-only alternatives, such as NetworkX.

Disclaimer: I'm the author of graph-tool. :-)