float[] volume;
   float minVolume, maxVolume;
int[] year;
float plotX1, plotX2, plotY1, plotY2;  // Plot area variables
PFont legendFont;
void setup() {
   String[] lines = loadStrings("USPSData.csv");  // Read Data file
 // Create Data arrays
   volume = new float[lines.length];
   year = new int[lines.length];
 // Parse data
   int j = 0;
   for (int i=0; i<lines.length; i++) {
   if (lines[i].charAt(0) == '#') continue;
   String[] pieces = split(lines[i], ",");
 // get the year and volume
   year[i] = int(pieces[0]);
   volume[i] = float(pieces[1]);
   }
   println("Data Loaded:");
 minVolume = min(volume);
   maxVolume = max(volume);
   println(minVolume);
   println(maxVolume);
 // chart drawing setup
   //size(800, 400);
   fullScreen();
 plotX1 = 120;
   plotX2 = width-30;
   plotY1 = 50;
   plotY2 = height - plotY1;
   legendFont = createFont("SansSerif", 20);
   textFont(legendFont);
   } // setup
void draw() {
   background(0);
 rectMode(CORNERS);
   noStroke();
   fill(255);
   rect(plotX1, plotY1, plotX2, plotY2);
 stroke(0);
   fill(125);
   // draw graph
   drawGraph(volume, minVolume, maxVolume);
 // draw legend
   // title
   fill(255);
   textSize(18);
   textAlign(LEFT);
   text("US Postal Service First Class Mail Volume (in Billions)", plotX1, plotY1 - 10);
   textSize(10);
   textAlign(RIGHT, BOTTOM);
   text("Source: USPS.gov", width-10, height-10);
 // draw axis labels
   drawXLabels();
   drawYLabels();
   } // draw
void drawGraph(float[] data, float minValue, float maxValue) {
   beginShape();
   for (int i=0; i < data.length; i++) {
   float x = map(i, 0, data.length-1, plotX1, plotX2);
   float y = map(data[i], 0, maxValue, plotY2, plotY1);
   vertex(x, y);
   }
   vertex(plotX2, plotY2);
   vertex(plotX1, plotY2);
   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, plotX1, plotX2);
   text(year[i], x, plotY2+10);
   line(x, plotY1, x, plotY2);
   }
   textSize(18);
   textAlign(CENTER, TOP);
   text("Year", width/2, plotY2+10);
   } // drawXLabels
void drawYLabels () {
   fill(255);
   textSize(10);
   textAlign(RIGHT);
 for (float i=minVolume-30; i <= maxVolume+30; i += 10000) {
   float y = map(i, minVolume-30, maxVolume+30, plotY2, plotY1);
   text(floor(i/1000), plotX1-10, y);
   line(plotX1, y, plotX2, y);
   }
   textSize(18);
   text("Volume", plotX1-40, height/2);
   }