1PImage mapImage;
2Table locationTable;
3int rowCount;
4
5Table dataTable;
6float dataMin = MAX_FLOAT;
7float dataMax = MIN_FLOAT;
8
9
10void setup() {
11  size(640, 400);
12  mapImage = loadImage("map.png");
13  locationTable = new Table("locations.tsv");
14  rowCount = locationTable.getRowCount();
15
16  // Read the data table
17  dataTable = new Table("random.tsv");
18
19  // Find the minimum and maximum values
20  for (int row = 0; row < rowCount; row++) {
21    float value = dataTable.getFloat(row, 1);
22    if (value > dataMax) {
23      dataMax = value;
24    }
25    if (value < dataMin) {
26      dataMin = value;
27    }
28  }
29
30  smooth();
31  noStroke();
32}
33
34
35void draw() {
36  background(255);
37  image(mapImage, 0, 0);
38
39  for (int row = 0; row < rowCount; row++) {
40    String abbrev = dataTable.getRowName(row);
41    float x = locationTable.getFloat(abbrev, 1);
42    float y = locationTable.getFloat(abbrev, 2);
43    drawData(x, y, abbrev);
44  }
45}
46
47
48void drawData(float x, float y, String abbrev) {
49  float value = dataTable.getFloat(abbrev, 1);
50  float diameter = 0;
51  if (value >= 0) {
52    diameter = map(value, 0, dataMax, 3, 30);
53    fill(#333366);  // blue
54  } else {
55    diameter = map(value, 0, dataMin, 3, 30);
56    fill(#ec5166);  // red
57  }
58  ellipse(x, y, diameter, diameter);
59}
60