// Names and consumption of various energy sources
String[] energySource;
float[] consumption;
color[] swatch = {color(247, 87, 87), color(247, 240, 87), color(97, 87, 247),
color(247, 87, 232), color(87, 247, 88), color(26, 11, 162)};
void setup() {
size(600, 500);
background(255);
// Read Data
String[] lines = loadStrings("EnergyData.txt");
println("Read " + lines.length + " lines.");
// Parse Data
energySource = new String[lines.length];
consumption = new float[lines.length];
for (int i=0; i < lines.length; i++) {
// split each line into pieces
String[] pieces = split(lines[i], ",");
energySource[i] =pieces[0];
consumption[i] = float(pieces[1]);
}
println("...parsed.");
} // setup()
void draw() {
background(255);
drawBarGraph(energySource, consumption);
} // draw()
void drawBarGraph(String[] legend, float[] data) {
float x = 0.1*width;
float y = 0.7*height;
float delta = 0.8*width/data.length;
float w = 0.95*delta;
for (int i=0; i < data.length; i++) {
// compute the height of bar
float h = map(data[i], 0, 100, 0, 0.7*height);
// Draw bar
if (inBox(mouseX, mouseY, x, y, w, h)) {
fill(255, 0, 0);
rect(x, y-h, w, h);
fill(0);
textAlign(CENTER);
text(data[i], x+w/2, y-h-10);
}
else {
fill(0);
rect(x, y-h, w, h);
}
// Draw name of data item
textAlign(CENTER);
text(legend[i], x+w/2, y+20);
x = x + delta;
}
} // drawBarGraph()
boolean inBox(float px, float py, float x, float y, float w, float h) {
return (px >=x && px <= x+w && py >= y-h && py <= y);
} // inBox()
void drawPie(String[] legend, float[] data) {
int pieX = width/2;
int pieY = height/2;
int pieSize = 250;
float startAngle = 0.0; // Pie variables
float stopAngle = 0;
int legendX = width-150;
int legendY = 150;
int legendDelta = 26;
textSize(24);
for (int i=0; i < data.length; i++) {
// Size of i-th pie slice
stopAngle = startAngle + data[i]*TWO_PI/100.0;
// Draw i-th pie slice
fill(swatch[i]);
noStroke();
arc(pieX, pieY, pieSize, pieSize, startAngle, stopAngle);
// Draw Legend
text(legend[i], legendX, legendY);
legendY += legendDelta;
// update for next pie slice
startAngle = stopAngle;
}
fill(0);
text("Energy Consumption\n% of Energy Sources\n(USA, 2005)", 75, 400);
} // drawPie()