// http://www.census.gov/popest/data/datasets.html // An INTERACTIVE bar chart visualizer // As long as label-value pairs are provided it will draw a bar chart // Uses array initialization, and is more general in terms of // the size of the screen, number of bars, etc. // the labels to display under the bars String[] labels; // the frequencies as collected during the in class survey int[] num; // Font stuff PFont tnr; void setup() { size(800, 800); smooth(); background(255); fill(0); // Read data from file String[] lines = loadStrings("NST2012.csv"); //println(lines); // Create data arrays labels = new String[lines.length]; num = new int[lines.length]; // Populate them (parse the data) for (int i=0; i < lines.length; i++) { // First split each line using commas as separator String[] pieces = split(lines[i], ","); labels[i] = pieces[4]; num[i] = int(pieces[5]); } // Fonts tnr = createFont("Times New Roman", 48); } // setup() void draw() { background(176,226,255); // set up plot dimensions relative to screen size float x = width * 0.05; float y = height * 0.75; float delta = width * 0.9 / num.length; float w = delta * 0.8; int high = max(num); // Ticks fill(0); for (int i = 5000000; i < high; i += 5000000) { float x1 = width * 0.05; float x2 = width * 0.95; float yi = map(i, 0, high, y, y - height * 0.65); stroke(125, 125, 125); line(x1, yi, x2, yi); fill(75, 75, 75); textSize(10); text(i / 1000000, x1 - 10, yi); pushMatrix(); translate(width * 0.025, height / 2); rotate(3 * PI / 2); textSize(16); fill(0); text("Millions", 0, 0); popMatrix(); } // Fonts... textFont(tnr); for (int i = 0; i < num.length; i++) { float h = map(num[i], 0, high, 0, height * 0.65); if (inBox(mouseX, mouseY, x, y - h, w, h)) { // Mouse interaction // if (dist(mouseX, mouseY, x+w/2, y-h) < w/2) { // Mouse // interaction fill(255); stroke(0); rect(x, y - h, w, h); textSize(36); String msg = labels[i] + ": " + (num[i] / 10000) / 100.0 + " Million"; text(msg, (width - textWidth(msg)) / 2, 100); } else { // no interaction fill(0); stroke(0); rect(x, y - h, w, h); } // Draw labels for each bar pushMatrix(); translate(x, y); rotate(PI / 2); textSize(12); text(labels[i], 2, 0); popMatrix(); x += delta; } // Draw Title and legend textSize(9); fill(0); text("Source: US Census Bureau (www.census.gov)", width - 200, height - 20); text("Created by Deepak Kumar on October 29, 2013.", width - 200, height - 10); textSize(24); text("2012 US State Population Projections", width * 0.05, 25); } // draw boolean inBox(float mx, float my, float x, float y, float w, float h) { // test to see if moint is in the bounds of rect return (mx >= x) && (mx <= x + w) && (my >= y) && (my <= y + h); } // inBox()