prefuse is a user interface toolkit for building highly-interactive information visualization applications. Prefuse provides facilities for data management, spatial layout, color, size, and shape encodings, rendering, zooming, animation, search, and interaction. Furthermore, it attempts to do so in a modular way, allowing users to piece together desired functionality to build custom visualization applications.

The general pattern of building prefuse applications is to

  1. Load the data to be visualized into prefuse's data structures. prefuse provides built-in support for {@link prefuse.data.Table Table}, {@link prefuse.data.Graph Graph}, and {@link prefuse.data.Tree Tree} data structures, and can read from a number of different file formats ({@link prefuse.data.io}) as well as communicate with relational databases ({@link prefuse.data.io.sql}).
  2. Create a {@link prefuse.Visualization Visualization} that maps the loaded data to a visual abstraction -- a representation of the data amenable to visual processing, rendering, and interaction. Each data element can have one or more corresponding {@link prefuse.visual.VisualItem VisualItems} that represent an interactive object on the screen. Each VisualItem includes properties such as the x,y location of the object and color, shape, and size settings, while providing access to the underlying data.
  3. Construct a series of data processing {@link prefuse.action Actions} that operate on the visual abstraction. These operations can involve just about anything, but common examples include setting the location, color, size, and shape of visual items or animating these properties between different configurations. These {@link prefuse.action.Action Action} instances can be grouped into {@link prefuse.action.ActionList ActionLists} for performing various processing tasks, and are backed by a flexible {@link prefuse.activity.ActivityManager ActivityManager} supporting event scheduling and animation. Furthermore, the API for these {@link prefuse.action.Action Actions} is very simple--just a single method-- making it easy to extend prefuse to suit your own needs or explore new ideas.
  4. Specify how visual items will be drawn to the screen. For example, do you want to see abstract shapes, text labels, or images? This is determined by constructing a {@link prefuse.render.RendererFactory RendererFactory} which maps visual items to {@link prefuse.render.Renderer Renderer} instances responsible for drawing visual items to the screen.
  5. Initialize one or more interactive {@link prefuse.Display Displays} for viewing and manipulating visual items. Displays provide optimized rendering of a viewing region, and also support view transformations, such as panning and zooming. Interactivity can be supplied using any number of pre-built controls ({@link prefuse.controls}), or custom interactions can be written by implemening the {@link prefuse.controls.Control Control} interface. Also, to support rich search and filtering through data items, various search engines ({@link prefuse.data.search}) and dynamic query bindings ({@link prefuse.data.query}) are available.

Prefuse also provides a host of other features, including a physics simulation engine for layout and interaction ({@link prefuse.util.force}), bounds management for optimized rendering, data indexing and internal query optimization, and a small SQL-like expression language for creating queries to prefuse's data structures, manipulating data, and creating derived data columns ({@link prefuse.data.expression}). Not all of this, however, is required for taking advantage of the toolkit, and often much of it is done for you in the background.

The latest version of the prefuse code, this documentation, a user's manual, and example applications are available online at http://prefuse.org