When designing a visualization application, first determine what the application is designed to do, and how it will be used. Using Prajna, you can develop applications relatively quickly, as long as you have a thorough understanding of both the data and the goals of the visualization.
The first, and one of the most important steps, is to determine the source or sources of your data. Identify the size of the body of data, how often it changes, and the structure of the basic data object. Is the data a relatively static JSQL database? Does the data reside on various URLs which must be scraped? Is the application handling streaming data? Is it feasible to display all of the data objects at one time, or does the application need to handle selection and filtering of the data? All of these qualities of data impact the fundamental design of a visualization application.
Prajna includes the FormatReader interface which you can use to load your particular data. The FormatReader is a simple interface which can be used to manage a moderate or large collection of data. For more advanced data access, Prajna includes the DataAccessor interface, which handles constructing various data structures - trees, graphs and grids - from the data.
Visualization applications typically organize and visualize data in several ways. The most common is simply a set of records, which can represent any body of data. A visualization application could chart various fields of this data, generate lists of records, or perform filtering on particular attributes of the data. In addition, a visualization application may use one or more other more complex data structures, such as trees, graphs or grids.
When developing your visualization application, determine which of these structures may be inherent in the data. Also, determine whether the structure is of interest to a particular visualization application. For instance, if your source of data is a set of tab-delimited files on a file system, you may want to include a representation of the file structure hierarchy. However, that tree structure may not be important if the organization of the files in the directory is haphazard.
Based on the characteristics and structures of the data, you can determine how the visualization application should display its data. Prajna supplies several out-of-the-box display components which can easily be used for developing sophisticated visual applications. Most of these are found in the prajna.viz.display package.
To create a particular visual experience, select one or more of the visualization display objects. Many of them allow you to specify a NodeRenderer, which is used to represent the individual data objects. Determine how an individual object should appear to the user, and select (or extend) an appropriate renderer.
Graph and Tree displays may also require an arrangement. Graph displays typically are represented by arranging the nodes and edges as a node-link diagram. Tree displays sometimes represent their data similarly. However, there are many ways to determine exactly where a particular data element should be placed on the drawing canvas. Prajna's Arrangement classes provide this functionality.
You may find it useful to offer several different arrangements or renderers, based upon the user's current task. For instance, a user who is looking for social constructs in a graph of people may want an arrangement based upon whether two people talked to one another. Later, he may want to display a different arrangement based upon how frequently two people communicated, or display the neighbors of a single individual in a radial design. Fortunately, this is easy to do with Prajna. Since the Prajna display components are independent of the arrangement algorithms and renderers, you can easily swap arrangements or renderers as needed for your application.
A visualization application should include an interactive element. Users want to examine, query, filter, or otherwise interact with data. A visualization application without this element is simply an image (or video) generator. Designing a good user interface is an entire discipline. However, good visualizations offer some common interface elements. The following elements, identified by Dr. Ben Schneiderman, should be included in any visualization application:
The Prajna visualization classes provide hooks for some of these tasks. For instance, all of the Display objects include methods to interactively select objects. The Arrangement classes include both a method to pick, and a method to set the display size. However, most of this functionality is largely application-specific. The demo applications show some of the different interactive techniques on a variety of data.