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
Techniques and tools #
- 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 not well maintained) 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, most likely you will just get a Ridiculogram. So, I'd strongly urge you to:
- Clarify what you really want to get from the visualization.
- Try to reduce the graph. There are two main approaches: coarse-graining (e.g. finding Community structure and consider each community as a node) or removing less important nodes and edges (e.g. applying k-core filtering with small k value, such as 1 or 2, may already give you a small enough network that you can visualize).
If the network density is a problem, not the number of nodes, then you may think about filtering edges. 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.
If you still want to cram in as many nodes as possible, I think you may want to take the similar approach to the Paperscape visualization — forget about the edges and try to position the nodes based on whatever connections you end up. (you can show 'backbone' edges maybe) You may want to have some notion of clusters for the nodes to have a relevant annotation (Community structure).
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