var table, r, yAxisData, xAxisData, maxLabel, maxValue, temp, interval, year, majors, quantities, quantColumn; function preload() { table = loadTable('graduates.csv', 'csv'); } function setup() { createCanvas(3000,1000); majors = ['Chemistry', 'Psychology', 'Computer Science and Math', 'Economics', 'Sociology', 'Statistics']; // Different Majors to be displayed majorRows = []; // Should be the same number as the number of majors quantColumn = 22; quantities = [2, 28, 44, 46]; // Column numbers for the quantitative data year = '2013'; // Change this variable to whatever year you would like data from. for (r = 1 ; r < table.getRowCount() ; r++) { if (table.getString(r, 49) == year) { for (temp = 0 ; temp < majors.length ; temp++) { if (table.getString(r, quantColumn) == majors[temp]) { append(majorRows, r); } } } } maxValue = int(table.getString(majorRows[0], quantities[0])); for (r = 0 ; r < majorRows.length ; r++) { for (temp = 0 ; temp < quantities.length ; temp++) { if (table.getString(majorRows[r], quantities[temp]) > maxValue) { maxValue = table.getString(majorRows[r], quantities[temp]); } } } interval = 10; while (true) { if (interval * 10 > int(maxValue)) { maxLabel = interval * 10; break; } interval += 10; } } function draw() { background(255); var x, y; line(25, 50, 760, 50); var height = int(600 / (majorRows.length * quantities.length)) temp = 62; var mappedValue; for (x = 0 ; x < majorRows.length ; x++) { textSize(11); text(table.getString(majorRows[x], quantColumn), 15, temp, 75, height * 3); for (y = 0 ; y < quantities.length ; y++) { mappedValue = map(int(table.getString(majorRows[x], quantities[y])), 0, maxLabel, 0, 600, true); textSize(8); text(table.getString(0, quantities[y]), 100, temp + height / 3); fill(0, 125, 125, 100); rect(150, temp - 6, mappedValue, height - 12); fill(0); if (mouseX >= 150 && mouseX <= 150 + mappedValue && mouseY >= temp - 6 && mouseY <= temp + height - 18) { text(table.getString(majorRows[x], quantities[y]), 155 + mappedValue, temp + 3); } temp += height; } line(25, temp - 12, 760, temp - 12); } y = 0; for (x = 150 ; x <= 750 ; x += 60) { line(x, temp - 14, x, temp - 10); text(y, x - 10, temp, 60, 50); y += interval; } fill(0); // Labels the quantitative splits textSize(14); text(table.getString(0, quantColumn), 25, 45); // Build and prints the title var title = "Number of"; for (x = 0 ; x < quantities.length ; x++) { if (x + 1 == quantities.length) { title += " and "; title += table.getString(0, quantities[x]); } else { title += " " + table.getString(0, quantities[x]) + ","; } } title += " by " + table.getString(0, quantColumn); textSize(20); text(title, 50, 15); }