There are several visualization methods. For example, you can visualize the adjacency matrix or visualize nodes and links directly (node-link diagram). Node-link diagrams are in general more beautiful but they are not necessarily the best method.
Table of Contents
- D3 - When you want to draw graphs on the web.
- Gephi - has cool demos but hard to use.
- Cytoscape - Better than Pajek. Probably one of the best solutions to draw a standard 2D graph figure. Still it is painful to use.
- graph-tool - Analysis & visualization in a single framework. Can be difficult to install.
Maybe for some special occasions #
- Gource - visualizing revision control system log
- Graphviz - It produces a very nice layout for small graphs (especially directional ones), but cannot draw large graphs effectively.
- NodeBox - Python library
- Pajek - Once standard, now maybe outdated. You can produce nice figures if you spend a lot of time though.
- Processing - If you are familiar with processing/Java, probably one of the best ways to draw a product-quality graph visualization.
- Tulip (software)
- Ubigraph - cool, but no way to export the results.
Dynamic network #
Visualizing large graphs #
Usually upper limit for the simple node-link viz is an order of 1k, when the graph is sparse. 500 or less is better. Cytoscape & Gephi are usually the standard tools (Gephi seems to be a bit faster) but it will be hard to visualize a graph with 10k or 100k nodes with these tools. Be sure to clarify what information you want to get from the visualization. Even if you can "visualize" it somehow, it is possible that it just gives a pretty (or even ugly), but meaningless figure.
- Clarify what you want to get from the visualization
- Decide reasonable ways to construct the graph, create a small sample, choose appropriate methods, and try it out.
- Repeat 2.
If the network is weighted, one can filter weak edges to remove clutters. Probably the most ruthless filtering is Minimum spanning tree or maximum relatedness graph (see Googling social network paper). There are several methods available: see Weighted network.
I think the major choices for creating 'meaningful' visualizations are these:
- Follow a similar approach to the Paperscape: forget about the edges and try to position the nodes based on whatever connections you end up. (you can show 'backbone' edges maybe)
- Reduce the size of the graph (or coarse-graining the graph) by finding communities. If you can find meaningful communities, you can consider each community as a super-node and visualize higher level network between super-nodes. There are lots of options regarding community detection.
- Filter many edges so that you can actually draw the whole thing.
File formats #
- .dot: developed by Graphviz project. Simple. OmniGraffle can read it.
- .net (pajek)
- edgelist: probably the simplest and the most common format. You list edges (nodefrom and nodeto) with a separator (e.g. a tab)
- geometry in action: Graph Drawing
- A Visual Survey of Tree Visualization
- http://skyeome.net/projects/networkChart/comparison.html - web-based graph visualization tool comparison
- Graphs Beyond the Hairball
- Graph Comics