mirror of
https://github.com/processing/processing4.git
synced 2026-02-10 17:19:25 +01:00
71 lines
1.5 KiB
Plaintext
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);
|
|
}
|
|
}
|