June 2, 2008

aiSee helps create graphs with complex layouts

Author: Ben Martin

If you need robust graphing software, consider aiSee, a cross-platform graph package that supports nested graphs, exports to many bitmap and vector formats, and handles graphs with as many as a million nodes. aiSee is free for noncommercial use under its own license.

When you download aiSee you will be asked to fill in an optional customer information form. You can download either the current stable 2.2.27 release or a beta release of the upcoming version 3. I started out by installing version 2.2.27 on a Fedora 8 machine. Once you have downloaded the roughly 2MB aiSee archive, expand it and execute the setup script to complete the install. The script copies everything into subdirectories of a path that you choose. I installed into /usr/local/aiSee to keep all of the aiSee installation under a single directory. To use aiSee in this manner you have to either place /usr/local/aiSee/bin in your PATH or create a softlink to the aisee binary.

$ cp /.../aiSee_linux.tgz `pwd`
$ tar xzvf aiSee_linux.tgz
$ cd aiSee
$ ./setup
Please specify the installation directory for aiSee.

This script will install aiSee in a hierarchy below that directory.
For example, if you specify [/usr/local], the executable files will
be installed in /usr/local/bin and the samples, icons, fonts, and
documentation files will be installed in the directories
/usr/local/share/aiSee/samples, /usr/local/share/aiSee/icons
/usr/local/share/aiSee/fonts, and /usr/local/share/aiSee/help.

Where should aiSee be installed ? [/usr/local] /usr/local/aiSee
$ sudo ln -s /usr/local/aiSee/bin/aisee /usr/local/bin/

On running aiSee, the first things I noticed were the aesthetics and the application's custom user interface design. The default interface of aiSee is black on white, which gets old quickly on a bright LCD screen. There is no menu bar at the top of the first window; you interact with the application through the context menu and hotkeys. While context-menu-driven interaction can work well for custom applications, aiSee fails to take advantage of context information in some cases. For example, by right-clicking on a node you can see a menu entry in the top level of the context menu "Center Node..." which brings up a dialog that lets you select which node to center the view on. Since you have brought up a context menu, you might hope to center the graph on the node you right-clicked on, but that is not a menu option, and the dialog that center node brings up is not set to the node that you right-clicked on either.

The interface suffers from other problems. When you try to open a file you will discover that things like rolling the mouse wheel to move through the file list dialog do not work. Also, hotkeys are direct single keys instead of Alt+key. aiSee crashed if I dismissed the layout properties window by clicking on the window close decoration instead of the OK or Cancel button inside the dialog -- a bug I think was related to the custom dialog handling.

Nevertheless, the custom keys and interaction style can be quite effective once you get around the initial learning curve. For example, pressing "m" in aiSee will show you the enter graph -- equivalent to selecting View/Maximum Aspect from the context menu. For comparison, the same functionality in the GIMP is Shift-Control-E Fit Image in Window. To lay out a graph you can press "l"; right-click to select the whole graph as the target of the new layout instead of a subgraph.

aiSee comes with about 50 example graphs in Graph Description Language (GDL) files to let you get a flavour of what is possible and how to achieve it. The GDL file format is easy to learn and allows you to describe a graph in an ASCII file. aiSee does not allow you to manually create a graph from the interface; you must express your graph in a GDL file.

aiSee provides a collection of tools to import information into the GDL graph file format. Some of these include apache2gdl, which converts an Apache log file into a GDL graph that shows visitor access path information; aicall, which creates a callgraph of an ANSI C program; and dot2gdl, which generates a GDL file from a graphviz dot file. Unfortunately the excel2gdl macro did not execute correctly for me in OpenOffice.org version 2.3.0.


I used dot2gdl to generate a GDL file from some existing dot files so I could examine the aiSee layout algorithms. dot2gdl requires the liberror library to be installed as well. The source for both is available at the dot2gdl homepage. Both liberror and dot2gdl are compiled with the standard ./configure; make; sudo make install procedure.

I first tried using the profile example from the graphviz project gallery. Because these graphs have been chosen to be displayed on the graphviz gallery page, the graphviz rendering should have a large advantage over aiSee. Attempts to produce a GDL file both without any special options, simply using dot2gdl profile.dot profile.gdl, resulted in a graph with some edges that didn't seem to be going anywhere. I could generate the red and green example graph on the dot2gdl homepage using the example command and the input dot file from the softmaint graph of the graphviz gallery. If you compare the softmaint graph with the graphviz rendering here to the aiSee rendering shown here you'll notice that aiSee avoids overlapping the core ovals and does not attempt to label the nodes at an unreadable zoom level.


To test resource requirements on larger graphs I created the little GDL generating script shown below. Moving from 500 to 1,000 edges has a large impact on the time aiSee requires to perform a layout; it goes from almost instant to a few seconds for the same layout parameters on a 1,000-node graph. For the GDL file with 1,000 nodes and edges aiSee used 10.3MB of virtual memory, 7.1MB of resident memory, 5.3MB of writable memory, and 1.8MB of shared memory. Increasing the number of nodes to 100,000 did not present any issues with memory consumption, but I halted the layout of the graph after a few minutes.


echo "graph: { color: khaki"
echo ""
for idx in `seq 0 $MAXNODES`
echo "node: { title: \"$idx\" } "

for idx in `seq 0 $MAXEDGES`
src=$(( $RANDOM * $RANDOM % $MAXNODES ));
dst=$(( $RANDOM * $RANDOM % $MAXNODES ));
echo "edge: { source: \"$src\" target: \"$dst\" } "
echo ""
echo "}"

Beta version 3.4

I obtained a copy of aiSee beta 3 for Linux for testing -- specifially, version 3.4 revision 1 build 80025. Version 3.x of aiSee appears to be statically linked with Qt 4.x and presents a much more standard user interface than the stable version, with a top menu bar as well as a toolbar. In the new version you can set markers at various views of the graph, letting you quickly change your view and zoom to interesting parts of the graph. The beta did not allow me to save, so I could not tell if these markers are persistent with the graph itself.


A View/Show panner function allows you to jump from one area of the graph to another by showing you the whole graph with most of it masked to a gray color and a white rectangle showing you whatever portion of the graph your current zoom level would allow you to see. The layout dialog has also undergone a slight revision, making the options a little more palatable to folks who are not graph experts.

Among the features of version 3.0 is export to PDF, anti-aliased rendering, and UTF-8 support. Unfortunately the 3.x beta version for Linux lacks features like export, but overall carries some welcome improvements over the 2.2.x version.

If you have a data source aiSee understands, such as Apache log files, or are willing to generate your GDL files yourself, then aiSee is a nice graph layout and exploration tool. I recommend using the 3.x beta for the more modern user interface, anti-aliasing, and markers functionality.


  • Reviews
  • Tools & Utilities
  • Graphics & Multimedia