Last active
December 26, 2015 19:09
-
-
Save BorisKourt/7199224 to your computer and use it in GitHub Desktop.
Jess's visualization code.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
String[] textFile; | |
int[] data; | |
IntList timeArray; | |
IntList pressArray; | |
ArrayList<IntList> pressPerIncr = new ArrayList(); //arraylist of an intlist of presses per a time period | |
//count of total presses | |
int lArm; | |
int rArm; | |
int lNeck; | |
int rNeck; | |
int lSides; | |
int rSides; | |
//count of presses per time | |
IntList lArmPresses; | |
IntList rArmPresses; | |
IntList lNeckPresses; | |
IntList rNeckPresses; | |
IntList lSidesPresses; | |
IntList rSidesPresses; | |
String[] theTitles = { | |
"L-Arm", "L-Side", "L-Neck", "R-Side", "R-Neck", "R-Arm" | |
}; | |
int[] theTotals = new int[6]; | |
color[] theColors = { | |
color(239, 100, 120), color(246, 185, 83), color(170, 166, 48), color(57, 137, 107), color(47, 70, 91), color(248, 52, 40) | |
}; | |
int theMin; | |
int theMax; | |
int minTime; | |
int maxTime; | |
int maxPress; | |
PImage img; | |
void setup() { | |
size(1000, 700); | |
img = loadImage("Person.jpg"); | |
textFile = loadStrings("LOG00097.TXT"); | |
data = int(split(textFile[0], ',')); | |
//get total presses of each location | |
lArm = getTotals(0); | |
rArm = getTotals(5); | |
lNeck = getTotals(2); | |
rNeck = getTotals(4); | |
lSides = getTotals(1); | |
rSides = getTotals(3); | |
//ended up needing separate arrays for time and presses in order to split presses per time periods | |
timeArray = new IntList(); | |
splitArrayTime(data, timeArray); | |
pressArray = new IntList(); | |
splitArrayPress(data, pressArray); | |
theTotals[0] = lArm; | |
theTotals[5] = rArm; | |
theTotals[2] = lNeck; | |
theTotals[4] = rNeck; | |
theTotals[1] = lSides; | |
theTotals[3] = rSides; | |
theMin = min(theTotals); | |
theMax = max(theTotals); | |
maxTime = timeArray.max(); | |
minTime = timeArray.min(); | |
//divide presses into which are done at specific line intervals | |
pressPerTime(); | |
//this is for individual presses per time period | |
lArmPresses = new IntList(); | |
rArmPresses = new IntList(); | |
lNeckPresses = new IntList(); | |
rNeckPresses = new IntList(); | |
lSidesPresses = new IntList(); | |
rSidesPresses = new IntList(); | |
pressVarPerTime(lArmPresses, 0); | |
pressVarPerTime(rArmPresses, 5); | |
pressVarPerTime(lNeckPresses, 2); | |
pressVarPerTime(rNeckPresses, 4); | |
pressVarPerTime(lSidesPresses, 1); | |
pressVarPerTime(rSidesPresses, 3); | |
} | |
void draw() { | |
background(255); | |
image(img, 75, 60, 96*2, 296*2); | |
drawBars(); | |
drawLines(); | |
drawDots(lArm, 120, 225, 0); | |
drawDots(rArm, 235, 225, 5); | |
drawDots(lNeck, 150, 165, 2); | |
drawDots(rNeck, 200, 170, 4); | |
drawDots(lSides, 130, 325, 1); | |
drawDots(rSides, 215, 325, 3); | |
fill(0); | |
text("Location of Presses", 175, 25); | |
} | |
void drawBars() { | |
int barLength = 300; | |
int startBarX = 550; | |
int startBarY = 575; | |
for (int i = 0; i < theTotals.length; i++) { | |
noStroke(); | |
fill(theColors[i]); | |
rect(startBarX, startBarY - 35*i, map(theTotals[i], 0, theMax, 0, barLength), 30); | |
} | |
stroke(1); | |
line(startBarX - 25, startBarY + 50, startBarX + barLength + 25, startBarY + 50); | |
line(startBarX - 25, startBarY + 50, startBarX - 25, startBarY - 25 - (35*(theTotals.length-1))); | |
fill(0); | |
stroke(1); | |
for (int i = 0; i < theTotals.length; i++) { | |
fill(theColors[i]); | |
text(theTitles[i], startBarX - 110, startBarY - (35*i) + 20); | |
} | |
for (int i = 0; i < 6; i++) { | |
fill(0); | |
text(theMax/6 * i, startBarX + i*(barLength/6), startBarY + 75); | |
} | |
} | |
void drawLines() { | |
int startLineX = 525; | |
int startLineY = 250; | |
int lineLength = 350; | |
int theHeight = 200; | |
int numIncr = 10; | |
strokeWeight(2); | |
beginShape(); | |
for (int i = 0; i < lArmPresses.size(); i++) { | |
noFill(); | |
stroke(theColors[0]); | |
float x = (i * (lineLength/10) + startLineX); | |
float y = map(lArmPresses.get(i), 0, theMax, startLineY, startLineY-theHeight); | |
vertex(x, y); | |
} | |
endShape(); | |
beginShape(); | |
for (int i = 0; i < lArmPresses.size(); i++) { | |
noFill(); | |
stroke(theColors[5]); | |
float x = (i * (lineLength/10) + startLineX); | |
float y = map(rArmPresses.get(i), 0, theMax, startLineY, startLineY-theHeight); | |
vertex(x, y); | |
} | |
endShape(); | |
beginShape(); | |
for (int i = 0; i < lArmPresses.size(); i++) { | |
noFill(); | |
stroke(theColors[2]); | |
float x = (i * (lineLength/10) + startLineX); | |
float y = map(lNeckPresses.get(i), 0, theMax, startLineY, startLineY-theHeight); | |
vertex(x, y); | |
} | |
endShape(); | |
beginShape(); | |
for (int i = 0; i < lArmPresses.size(); i++) { | |
noFill(); | |
stroke(theColors[4]); | |
float x = (i * (lineLength/10) + startLineX); | |
float y = map(rNeckPresses.get(i), 0, theMax, startLineY, startLineY-theHeight); | |
vertex(x, y); | |
} | |
endShape(); | |
beginShape(); | |
for (int i = 0; i < lArmPresses.size(); i++) { | |
noFill(); | |
stroke(theColors[1]); | |
float x = (i * (lineLength/10) + startLineX); | |
float y = map(lSidesPresses.get(i), 0, theMax, startLineY, startLineY-theHeight); | |
vertex(x, y); | |
} | |
endShape(); | |
beginShape(); | |
for (int i = 0; i < lArmPresses.size(); i++) { | |
noFill(); | |
stroke(theColors[3]); | |
float x = (i * (lineLength/10) + startLineX); | |
float y = map(rSidesPresses.get(i), 0, theMax, startLineY, startLineY-theHeight); | |
vertex(x, y); | |
} | |
endShape(); | |
stroke(1); | |
line(startLineX, startLineY, startLineX + lineLength, startLineY); | |
line(startLineX, startLineY, startLineX, startLineY - (35*(theTotals.length-1))); | |
for (int i = 0; i < 6; i++) { | |
fill(0); | |
text(String.format("%.2f", float(maxTime/1000/60)/10 * i), startLineX + i*(lineLength/6), startLineY + 30); | |
} | |
for (int i = 0; i < 6; i++) { | |
fill(0); | |
//println(maxPress); | |
text(theMax/6 * i, startLineX-25, startLineY - (i * 35) + 5); | |
} | |
textAlign(CENTER); | |
text("Minutes", startLineX + lineLength/2, startLineY + 75); | |
pushMatrix(); | |
translate(width/2-25, height/2-175); | |
rotate(3 * PI/2); | |
text("Presses", 0, 0); | |
popMatrix(); | |
} | |
int getTotals(int toCount) { | |
int theTotal = 0; | |
for (int i = 0; i < data.length; i+=2) { | |
if (data[i] == toCount) { | |
theTotal++; | |
} | |
} | |
return theTotal; | |
} | |
void splitArrayTime(int[] theInitArray, IntList outputArray) { | |
for (int i=1; i< theInitArray.length; i+=2) { | |
outputArray.append(theInitArray[i]); | |
} | |
} | |
void splitArrayPress(int[] theInitArray, IntList outputArray) { | |
for (int i=0; i< theInitArray.length; i+=2) { | |
outputArray.append(theInitArray[i]); | |
} | |
} | |
void pressPerTime() { | |
int timeRange = (maxTime - minTime)/10; | |
for (int j = 0; j < 10; j++) { | |
IntList matchingNums = new IntList(); | |
for (int i = 0; i < pressArray.size()-1; i++) { | |
if (timeArray.get(i) > (j * timeRange) && timeArray.get(i) < (j+1) * timeRange) { | |
matchingNums.append(pressArray.get(i)); | |
} | |
else { | |
matchingNums.append(0); | |
} | |
} | |
pressPerIncr.add(matchingNums); | |
} | |
} | |
void pressVarPerTime(IntList indvPressPerTime, int theNum) { | |
for (int i = 0; i < pressPerIncr.size(); i++) { | |
int theCount = 0; | |
for (int j = 0; j < pressPerIncr.get(i).size(); j++) { | |
if (int(pressPerIncr.get(i).get(j)) == theNum) { | |
theCount++; | |
} | |
} | |
indvPressPerTime.append(theCount); | |
} | |
} | |
void drawDots(int numPresses, int theX, int theY, int theI) { | |
float dotSize = map(numPresses, 0, theMax, 15, 40); | |
textSize(13); | |
noStroke(); | |
fill(theColors[theI]); | |
ellipse(theX, theY, dotSize, dotSize); | |
textAlign(CENTER, CENTER); | |
fill(255); | |
text(numPresses, theX, theY-2); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment