Skip to Content
[CAIDA - Center for Applied Internet Data Analysis logo]
Center for Applied Internet Data Analysis
Walrus - Graph Visualization Tool
Walrus is a tool for interactively visualizing large directed graphs in three-dimensional space. By employing a fisheye-like distortion, it provides a display that simultaneously shows local detail and the global context.

Source Code Available

The source code to Walrus is now available under the GNU GPL. You may download the source code below.

Also available on GitHub


Walrus is a tool for interactively visualizing large directed graphs in three-dimensional space. It is technically possible to display graphs containing a million nodes or more, but visual clutter, occlusion, and other factors can diminish the effectiveness of Walrus as the number of nodes, or the degree of their connectivity, increases. Thus, in practice, Walrus is best suited to visualizing moderately sized graphs that are nearly trees. A graph with a few hundred thousand nodes and only a slightly greater number of links is likely to be comfortable to work with.

Walrus computes its layout based on a user-supplied spanning tree. Because the specifics of the supplied spanning tree greatly affect the resulting display, it is crucial that the user supply a spanning tree that is both meaningful for the underlying data and appropriate for the desired insight. The prominence and orderliness that Walrus gives to the links in the spanning tree, in contrast to all other links, means that an arbitrarily chosen spanning tree may create a misleading or ineffective visualization. Ideally, the input graphs should be inherently hierarchical.

Walrus uses 3D hyperbolic geometry to display graphs under a fisheye-like distortion. At any moment, the amount of magnification, and thus the level of visible detail, varies across the display. This allows the user to examine the fine details of a small area while always having a view of the whole graph available as a frame of reference. Graphs are rendered inside a sphere that contains the Euclidean projection of 3D hyperbolic space. Points within the sphere are magnified according to their radial distance from the center. Objects near the center are magnified, while those near the boundary are shrunk. The amount of magnification decreases continuously and at an accelerated rate from the center to the boundary, until objects are reduced to zero size at the latter, which represents infinity. By bringing different parts of a graph to the magnified central region, the user can examine every part of the graph in detail.

Walrus is being developed by Young Hyun at CAIDA. Although Walrus is based on research by Tamara Munzner, she is not connected with this effort in any way, nor does Walrus make use of any code from her H3Viewer.


Please note that Walrus currently has the following requirements, restrictions, or limitations which may render it unsuitable for a given problem domain or dataset:

  • Only directed graphs are supported.
  • Only connected graphs with reachable nodes are supported. All nodes must be reachable from all other nodes if the direction of links is disregarded, and all nodes must be reachable from the root node if the direction of links is enforced.
  • A meaningful spanning tree is required. The spanning tree must be meaningful with respect to the problem domain, dataset, research hypothesis, or in some other way. It must not be arbitrary. (This is a crucial requirement. Difficulty in coming up with such a spanning tree is a sure sign that Walrus is unsuitable for the task.) Note that this requirement does not preclude cycles or other non-tree links in the graph itself.
  • Multiple links are not supported. There cannot be more than one link connecting together any given pair of nodes. In particular, undirected graphs cannot be simulated with bidirectional links.
  • Dynamically changing graphs are not supported. It is not possible to alter the structure or content of a graph once loaded or to update the display based on a data feed.
  • Only one graph may be loaded at any time. In particular, two graphs cannot be loaded for side-by-side comparison.
  • Slight changes in the structure of a graph may lead to dramatically different graph layouts. It may be difficult to compare related graphs, such as those representing snapshots of an evolving dataset.
  • Only LibSea graph files (a documented CAIDA-developed input format) are supported.
  • Walrus is a standalone application and not an API. It cannot be incorporated into other applications.
  • Walrus cannot be used as an applet.


The following galleries show graphs of various sizes and complexity. Some are network topology graphs derived from skitter measurements, with sizes ranging from ten thousand to five hundred thousand nodes. Others represent our web site directory hierarchy (around fourteen thousand nodes), CVS repository (around eighteen thousand nodes), and directory trees.

Visualization and Navigation Gallery
Visualization and Navigation
Abstract Art Gallery
Abstract Art

Implemented Features

  • rendering at a guaranteed framerate regardless of graph size
  • coloring nodes and links with a fixed color, or by RGB values stored in attributes
  • labelling nodes
  • picking nodes to examine attribute values
  • displaying a subset of nodes or links based on a user-supplied boolean attribute
  • interactive pruning of the graph to temporarily reduce clutter and occlusion
  • zooming in and out

Features Under Consideration

  • more options for coloring objects (such as with a perceptually uniform colorscale)
  • filtering and other interactive processing


Walrus requires Java3D v1.2.1 (or later) and JDK 1.3.0 (or later). A hardware-accelerated graphics card with OpenGL support is required (on Windows systems, you must use the OpenGL version of Java3D and not the DirectX version). It is also necessary to have a speedy machine with lots of memory (128MB is probably a minimum; 256MB or more is better; 512MB is probably required for a few hundred thousand nodes).

Walrus was developed and tested on a Sun Ultra 60 with an Elite 3D card and 512MB of RAM, running Solaris 7, a box graciously donated by Sun.


Note: The current (as of 2005) MacOS X port of Java3D does not work properly with MacOS X 10.4 (Tiger) and 10.5 (Leopard). There are noticeable glitches in the rendering, especially in the animated transition effects of Walrus, and the drawing of node labels does not work at all. So, until Apple/Sun fixes Java3D, Walrus is unusable under MacOS X 10.4 and 10.5 (although it should still work with older MacOS X releases).
Walrus will run on any platform that has the appropriate versions of the JDK and Java3D (e.g., Windows, Solaris, Linux, and MacOS X [you'll need a mouse with more than one button]). You may download the binary distribution from either walrus-0.6.3.tar.gz or The source code to Walrus is available under the GNU GPL. You may download the source code from either walrus-0.6.3-src.tar.gz or

A precompiled jar file of the LibSea graph library is included in Walrus. This is all you need; however, if you are interested in the source code, you may download it from the LibSea web page. The source code to LibSea is available under the GNU Lesser GPL.


The latest version is 0.6.3, released on Mar 30, 2005. This is the first public release of the source code.

Changes since 0.6.2, released Feb 20, 2003:

  • No changes to any functionality; just a licensing change to the GPL.
  • Added 'palmtree.graph' to set of sample graphs.

Changes since 0.6.1, released Nov 4, 2002:

  • No new features.
  • Corrected equation for computing colors in guide.txt.

Changes since 0.6, released Apr 29, 2002:

  • No new features.
  • Re-implemented routines for hyperbolic transformations.

Changes since 0.5, released Apr 19, 2002:

  • Added support for zooming the display. The user can zoom in toward the central node or zoom out from it to an arbitrary degree.
  • Added support for turning depth cueing off.
  • Fixed bug in which picking would sometimes become temporarily inaccurate after the window is resized.
  • Fixed bug in which the display would lock up if the user executed a command through the keyboard while concurrently interacting with the mouse.

Changes since 0.4, released Apr 12, 2002:

  • Added support for temporarily hiding parts of the graph. For example, the user can display only the subtree rooted at the current central node. It should now be much easier to navigate and examine large complicated graphs, since occlusion can be eliminated by selective pruning.
  • Added code to detect and warn about malformed spanning trees.
  • Added support for quickly navigating to the parent of the current central node.
  • Added support for resetting the rendering state. Loss of floating-point precision can cause the display to become wholly useless. This sometimes happens while navigating very large graphs.

Changes since 0.3, released Apr 1, 2002:

  • Added support for computing the layout using extended precision arithmetic (about 30 decimal digits of precision). Previously, the layout calculations would sometimes yield invalid coordinates (NaNs) for some tall and bushy graphs. This problem went unnoticed because Java does not throw floating-point exceptions.

Changes since 0.2, released on Jan 25, 2002:

  • Added some more introductory documentation on the LibSea file format. This should help people to get up to speed quickly. See docs/guide.txt.
  • Added support for overlaid node labels. Attribute values can now be shown in the display area next to the relavant nodes. These labels, however, are only temporary and disappear once the user moves or refreshes the window.
  • Added support for selection attributes. A boolean attribute in the graph file can be used to specify which nodes or links are to be displayed.
  • Added support for displaying attributes of list type. Previously, only scalar attributes could be displayed.
  • Improved the layout of binary trees. Walrus now makes better use of available space when laying out binary trees.
  • Fixed bug in which links would sometimes be drawn as black lines. If you had transparency enabled and then switched the coloring of links to RGB (that is, to colors stored in an attribute), then links would sometimes be drawn incorrectly as black lines.
  • Fixed bug in which rotations would stop working when axes were disabled while running the nonadaptive render loop.

Changes since 0.1, released on Dec 5, 2001:

  • Re-implemented the picking algorithm. Picking is now more accurate and intuitive in behavior.
  • Added full support for color to the nonadaptive render loop. The nonadaptive render loop is active when Rendering->Adaptive Rendering is unchecked.
  • Fixed a refresh bug. The display would sometimes fail to refresh when the user clicked within the Walrus window to bring it to the front.


Tamara Munzner worked out many of the ideas and techniques underlying Walrus in her Ph.D thesis. Her other publications are also good resources.

Another related work is the hyperbolic tree viewer at Inxight. Walrus differs from their product in at least three ways. We work in 3D instead of 2D, use the Klein model of hyperbolic geometry instead of the Poincare, and use a very different layout algorithm. Laying out graphs in 3D is challenging, as occlusion along the line of sight diminishes some of the benefits of the additional dimension. Hence, 3D layout algorithms can differ considerably from similar 2D algorithms. Walrus uses a modified version of the H3 layout algorithm designed by Munzner.

Resources on hyperbolic geometry:

  • NonEuclid. An introduction to hyperbolic geometry. It includes an interactive Java applet for creating straightedge and compass constructions in the Poincare model.
  • The Hyperbolic Geometry Exhibit. An introduction to hyperbolic geometry at the Geometry Center.
  • David C. Royster. Neutral and Non-Euclidean Geometries. Lecture notes that explore the mathematical details of hyperbolic geometry.
  • Mark Phillips and Charlie Gunn. Visualizing hyperbolic space: Unusual uses of 4x4 matrices. In 1992 Symposium on Interactive 3D Graphics (Boston, MA, March 29 - April 1, 1992). A paper giving the 4x4 matrices for performing reflections, translations, and rotations in the Klein model. It also gives a formulation of the hyperbolic distance function, which computes the hyperbolic distance between any two Euclidean points in the model.

Resources on graph drawing:

Resources on nonlinear magnification:

  • Nonlinear Magnification Home Page. A starting point for nonlinear magnification. It includes a survey of techniques and a large collection of links to relavant papers.
  • Manojit Sarkar and Marc H. Brown. Graphical Fisheye Views of Graphs. A distortion-based approach in 2D that uses a nonlinear magnification function rather than hyperbolic geometry.


Support for this work was provided by the NSF CAIDA and Internet Atlas grants (ANI-9711092 and ANI-9996248), the DARPA NGI and NMS programs (N66001-98-2-8922 and N66001-01-1-8909), Sun Microsystems, and CAIDA members.

  Last Modified: Fri Oct-25-2019 12:31:34 PDT
  Page URL: