Generating Parallel Coordinate Displays with DX


Overview:

Parallel Coordinates is a method of displaying multivariate data pioneered by Al Inselberg (formerly of IBM). Given an N-dimensional data set, N evenly spaced vertical axes are created, where the top of an axis corresponds to the maximum value for that dimension and the bottom corresponds to the minimum. Each data point is manifested as a polyline spanning all N axes, where the intersection point on each axis is proportional to the value in that dimension and how it relates to the minimum and maximum.

Reference: A. Inselberg and B. Dimsdale, ``Parallel coordinates: a tool for visualizing multi-dimensional geometry'', Proc. Visualization '90, pages 361 - 378.

Program:

Algorithm:

The ReadMDVpc module reads in a multivariate data file in the XmdvTool format.

The labels of the dimensions are stored in an array of strings (max. 80 characters), and an array of pointers to the strings is created. This is then used for the DX String List.

DX Arrays are then created to hold the positions for the data points, labels, and axes, and the connections for the data and axes.

Each data point is then read in and normalized to a range of 0.0 to 1.0. Then for each of the N axes the offset to its position is computed and an entry is added to the position array for the data.

The N-1 connections for each data element are then created, making a polyline across all the axes. All connections are 1-way.

The positions for the text labels are then computed, placed along the top of each axis.

The positions for the axes are simply evenly spaced boundary points across the top and bottom of the normalized box containing the display. Connections are simply pairwise (all lines are simple - no polylines).

The network for displaying the parallel coordinates simply breaks the three components out (data, border, text), colors them, sets the data field to only Show Connections, angles the text to improve readability, and combines the results into an Image.

Source Code:

Sample Output:


[UP]