float[] volume;
float minVolume, maxVolume;
int[] year;
float X1, X2, Y1, Y2;
PFont legendFont = createFont("SansSerif", 20);
void setup() {
String[] lines = loadStrings("USPSData.txt");
volume = new float[lines.length];
year = new int[lines.length];
int j = 0;
for (int i=0; i<lines.length; i++) {
if (lines[i].charAt(0) == '#') continue;
String[] pieces = split(lines[i], ",");
// get the closing price of stock, and month
volume[i] = float(pieces[1]);
year[i] = int(pieces[0]);
}
println("Data Loaded:");
minVolume = min(volume);
maxVolume = max(volume);
println(minVolume);
println(maxVolume);
// drawing setup
size(800, 400);
// plot rectangle
X1 = 120;
X2 = width-30;
Y1 = 50;
Y2 = height - Y1;
smooth();
textFont(legendFont);
} // setup
void draw() {
background(0);
rectMode(CORNERS);
noStroke();
fill(255);
rect(X1, Y1, X2, Y2);
stroke(0);
fill(200);
drawGraph(volume);
// draw legend
// title & Source info
fill(255);
textSize(18);
textAlign(LEFT);
text("US Postal Service First Class Mail Volume (in Billions)", X1, Y1 - 10);
textSize(10);
textAlign(RIGHT, BOTTOM);
text("USPS.gov", width-10, height-10);
// axis labels
drawXLabels();
drawYLabels();
} // draw
void drawGraph(float[] data) {
beginShape();
for (int i=0; i < data.length; i++) {
float x = map(i, 0, data.length-1, X1, X2);
float y = map(data[i], 0, maxVolume, Y2, Y1);
vertex(x, y);
}
vertex(X2, Y2);
vertex(X1, Y2);
endShape(CLOSE);
} // drawGraph
void drawXLabels() {
fill(255);
textSize(10);
textAlign(CENTER);
for (int i=0; i<year.length; i+=10) {
float x = map(i, 0, year.length, X1, X2);
text(year[i], x, Y2+10);
stroke(0);
line(x, Y1, x, Y2);
}
textSize(18);
textAlign(CENTER, TOP);
text("Year", width/2, Y2+10);
} // drawXLabels
void drawYLabels () {
fill(255);
textSize(10);
textAlign(RIGHT);
for (float i=0; i <= maxVolume; i += 10000) {
float y = map(i, 0, maxVolume, Y2, Y1);
text(floor(i/1000), X1-10, y);
line(X1, y, X2, y);
}
textSize(18);
text("Volume", X1-40, height/2);
}
void mouseClicked(){
save("USPSFirstClassColume.tiff");
}