About Parallel Coordinates
Parallel coordinates were proposed by Alfred Inselberg as a new way to represent multidimensional information. A parallel coordinates visualization assigns one vertical axis to each variable, and evenly spaces these axes horizontally. This is in contrast to the traditional Cartesian coordinates system where all axes are mutually perpendicular. By drawing the axes parallel to one another, one can represent data in much greater than three dimensions. Each variable is plotted on its own axis, and the values of the variables on adjacent axes are connected by straight lines. Thus, a point in an n-dimensional space becomes a polygonal line laid out across the n parallel axes with n-1 line segments connecting the n data values. Many such data points (in Euclidean space) will map to many of these polygonal lines in a parallel coordinate representation. Viewed as a whole, these many lines might well exhibit coherent patterns which could be associated with inherent correlation of the data points involved. In this way, the search for relations among the variables is transformed into a 2-D pattern recognition problem, and the variables become amenable to visualization.
One important aspect of this visualization scheme is that it provides opportunities for human pattern recognition: by using color to distinguish lines, and by supporting various forms of interaction with the parallel coordinates system, patterns can be picked up in the given database of multidimensional data. The number of dimensions that can be visualized using this scheme is fairly large, limited only by the horizontal resolution of the screen. However, as the number of dimensions increases, the axes come closer to each other, making it more difficult to perceive patterns. It is also important to note the flexibility of the parallel coordinates approach in that each coordinate can be individually scaled -- some may be linear with different bounds, while others may be logarithmic. While this prevents us from observing the exact relationships between various parameters, it may aid in identifying direct, inverse, and one-to-one relationships between the parameters. Scaling an individual parameter has another advantage in that it helps us in zooming into or zooming out of a subset of a data set represented, effectively brushing out or eliminating (undesirable) portions of the data set.
This applet was developed as part of VizCraft, my Master's thesis project at Virginia Tech. Its development was inspired by the need to visualize multidimensional design spaces associated with the configuration design of a supersonic transport. It recognizes the Simple Tabular Format (STF) table format for storing multidimensional data.
Implementation and UI Design
Simple Tabular Format (STF)
You can create files for your own data of these types:
- Integer - A whole number, without commas or decimal: 1234567, -42
- Real - A number that is either an Integer or a number with a decimal: 3.141, -32
- String - A non-breaking sequence of characters: This_is_a_string, soIsThis
Give your file an stf extension. Enter data in the following format:
# Comments have # in the first column. # Type the number of fields, on a line by itself. # Then type field names and types. Field names must not contain # spaces. # 3 PersonName String Age Integer HourlyWage Real # # Data type is case-insensitive. # Default data delimiters are tabs and spaces. # Currently no "set" method to change delimiters. # Here's the data, tab-delimited. Notice that the data columns are # in the order they are listed above. # Joe 23 5.75 Mary 18 4.75 Fred 54 100.00 Ginger 48 100.00 # # Nothing special is required to end the file.
This applet has been written using Java Development Kit (JDK) 1.1.6. It has been packaged into a jar file, which is available for download below. In order for your browser to read this applet, you need to embed the following code in your HTML file:
<applet codebase="<URL specifying location of classes>" code="ParallelCoordinates.class" archive="ParallelCoordinatesApplet.jar" width=480 height=370> </applet>