Files
processing4/java/examples/Books/Visualizing Data/ch03-usmap/step08_rollovers/step08_rollovers.pde
2011-01-26 19:35:23 +00:00

71 lines
1.5 KiB
Plaintext

PImage mapImage;
Table locationTable;
int rowCount;
Table dataTable;
float dataMin = MAX_FLOAT;
float dataMax = MIN_FLOAT;
void setup() {
size(640, 400);
mapImage = loadImage("map.png");
locationTable = new Table("locations.tsv");
rowCount = locationTable.getRowCount();
// Read the data table
dataTable = new Table("random.tsv");
// Find the minimum and maximum values
for (int row = 0; row < rowCount; row++) {
float value = dataTable.getFloat(row, 1);
if (value > dataMax) {
dataMax = value;
}
if (value < dataMin) {
dataMin = value;
}
}
PFont font = loadFont("Univers-Bold-12.vlw");
textFont(font);
smooth();
noStroke();
}
void draw() {
background(255);
image(mapImage, 0, 0);
for (int row = 0; row < rowCount; row++) {
String abbrev = dataTable.getRowName(row);
float x = locationTable.getFloat(abbrev, 1);
float y = locationTable.getFloat(abbrev, 2);
drawData(x, y, abbrev);
}
}
void drawData(float x, float y, String abbrev) {
float value = dataTable.getFloat(abbrev, 1);
float radius = 0;
if (value >= 0) {
radius = map(value, 0, dataMax, 1.5, 15);
fill(#333366); // blue
} else {
radius = map(value, 0, dataMin, 1.5, 15);
fill(#ec5166); // red
}
ellipseMode(RADIUS);
ellipse(x, y, radius, radius);
if (dist(x, y, mouseX, mouseY) < radius+2) {
fill(0);
textAlign(CENTER);
// Show the data value and the state abbreviation in parentheses
text(value + " (" + abbrev + ")", x, y-radius-4);
}
}