Integrating Data and View
Due 6 March 2017
The goal of this project is to bring together all of the elements--data, GUI, and viewing--into a single application that enables interactive visualization of data sets in the proper format. The result of this project should be an application that can read a data set and enable the user to interactively view it in up to 5 user-selected dimensions (3 spatial, color, and size).
Create an updatePoints method that is analogous to the updateAxes
function. It should build a new VTM, use the VTM to transform the
matrix of data points, then update the coordinates of each data point
using the canvas.coords function. Note, if there are no data objects
(len(self.objects) == 0), then updatePoints can return without doing
You should add a call to updatePoints wherever you have a call to updateAxes.
Test your program with the two data sets provided on the lab page.
Go back and create a proper handleChooseAxes function. This function
should let the user select the data column to use for each of five
different axes: X, Y, Z, Color, and Size. The user must select at
least the X and Y spatial axes, but the Z, Color, and Size axes are
all optional and can be used in any combination with X and Y.
You have some flexibility as to how you implement this capability. You can create a single dialog that lets the user specify all of the information. Alternatively, you can put popup menus on your main screen that let the user select each axis and then have a Plot button that clears the screen and then uses the current selections to plot the data. The choice is yours, but focus on the workflow aspects of the design. It should be easy to generate plots with different columns in different axes.
In particular, make sure it is easy for the user to know which columns are which by using the proper headers. Do not use column indices, and do not require the user to type a header name in order to select a column.
- Add the necessary code to support the color and size aspects of the plotting. A nice extension is to add legends to your main screen that show the values corresponding to different colors and sizes.
- Test your system on the Australia Coast data. Try plotting using latitude and longitude as (x, y) with other dimensions as z, color, and size. Capture some screen shots. An extension is to enable the user to select an Eckert projection for the latitude and longitude variables.
- Test your system on the data set you used last in project 2.
Handle resizing the window appropriately. You can use the following
binding to connect the resize method to an event whenever the canvas
', self.resize )
- Extend the range of plotting options to 1-5 columns, where selecting 1 column generates a histogram.
- Implement visualization dimensions other than color and size such as texture or shape.
- Let the user select or mouse-over a data point and then pop up a window or display the point's raw values in a status bar.
- Handle the case where the user wants to have multiple files open.
- Put labels on the axes that stick with them as they rotate/scale/translate
- Add legends to your plot for the non-spatial axes (e.g. color, size).
- Make use of your anlaysis functions and let the user view data properties like the mean, standard deviaion, and range of selected columns.
- Be creative and add useful features.
Make a wiki page for the project writeup.
Once you have written up your assignment, give the page the label:
Put your code in the Private subdirectory of your folder on Courses. Please make sure you are organizing your code by project. Your handin code should include all the python files necessary to run your program as well as the data file you used in Project 2 and again this week to test your code.