float closestDist; String closestText; String dim1lotext; String dim1hitext; String dim2lotext; String dim2hitext; float closestTextX; float closestTextY; Table bandtable; int rowCount; String band; float minX; float maxX; float minY; float maxY; PFont font; int dim1; int dim2; int bandcount; int mincount; void setup(){ // make this relative, add margins, search function, 3D size(900,720); bandtable = new Table("loadings6.tsv"); rowCount = bandtable.getRowCount(); maxX = 410; minX = -700; maxY = 700; minY = -300; dim1=6; dim2=4; dim1lotext = "Mainstream"; dim1hitext = "Experimental"; dim2lotext = "New"; dim2hitext = "Old"; } void draw(){ background(0); closestDist = MAX_FLOAT; font = createFont("SansSerif",20); textFont(font); fill(255); textAlign(LEFT); text(dim1lotext,0,height/2); textAlign(CENTER); text(dim2hitext,width/2,height-20); text(dim2lotext,width/2,20); textAlign(RIGHT); text(dim1hitext,width,height/2); font = createFont("SansSerif",10); textFont(font); for (int row = 0; row < rowCount; row++){ float bandX = bandtable.getFloat(row,dim1); float bandY = bandtable.getFloat(row,dim2); int bandcount = bandtable.getInt(row,7); if ((bandX>=minX)&&(bandX<=maxX)&&(bandY<=maxY)&&(bandY>=minY)){ float x = map(bandX,minX,maxX,0,width); float y = map(bandY,minY,maxY,0,height); band = bandtable.getString(row,0); drawdata(x,y,band,bandcount); } } if (closestDist !=MAX_FLOAT) { fill(255,0,0); textAlign(CENTER); text(closestText, closestTextX,closestTextY); } } void drawdata(float x, float y, String band, int count){ fill(255); float d = dist(x,y,mouseX,mouseY); if ((d<10) && (d < closestDist)){ closestDist = d; closestText=band; closestTextX = x; closestTextY = y-5; fill(242,60,60); } smooth(); float diam = map(count, 6,906,2,20); ellipse(x,y,diam,diam); } void zoom(int inout){ float rangeX = maxX - minX; float rangeY = maxY - minY; if (inout == 1) { minX = minX + (rangeX / 16); maxX = maxX - (rangeX / 16); minY = minY + (rangeY / 16); maxY = maxY - (rangeY / 16); } if (inout == 0) { minX = minX - (rangeX / 16); maxX = maxX + (rangeX / 16); minY = minY - (rangeY / 16); maxY = maxY + (rangeY / 16); } } void pan(int direction){ float rangeX = (maxX - minX)/10; float rangeY = (maxY - minY)/10; if (direction==4){ minX = minX - rangeX; maxX = maxX - rangeX; } if (direction==6){ minX = minX + rangeX; maxX = maxX + rangeX; } if (direction==8){ minY = minY - rangeY; maxY = maxY - rangeY; } if (direction==2){ minY = minY + rangeY; maxY = maxY + rangeY; } } void changedim(int updown, int dimno){ if (updown == 1 && dimno == 1) { dim1 = dim1+1; } if (updown == 0 && dimno == 1) { dim1 = dim1-1; } if (updown == 1 && dimno == 2) { dim2 = dim2+1; } if (updown == 0 && dimno == 2) { dim2 = dim2-1; } if (dim1 == dim2 && dimno==1){ dim1 = dim1 + 1; } if (dim1 == dim2 && dimno ==2){ dim2 = dim2 + 1; } if (dim1>6) { dim1=1; } if (dim2>6){ dim2 =1; }if (dim1<1) { dim1=6; } if (dim2<1){ dim2 =6; } if (dim1 ==1){ maxX = 350; minX = -700; dim1lotext = "White, UK"; dim1hitext = "Black, US"; } if (dim1 ==2){ maxX = 300; minX = -750; dim1lotext = "Electronic, ambient"; dim1hitext = "Guitar, lyrical"; }if (dim1 ==3){ maxX = 800; minX = -360; dim1lotext = "Acoustic"; dim1hitext = "Metal"; }if (dim1 ==4){ maxX = 700; minX = -300; dim1lotext = "New"; dim1hitext = "Old"; }if (dim1 ==5){ maxX = 400; minX = -750; dim1lotext = "Electronic, dance"; dim1hitext = "Guitar, angsty"; }if (dim1 ==6){ maxX = 410; minX = -700; dim1lotext = "Mainstream"; dim1hitext = "Experimental"; } if (dim2 ==1){ maxY = 350; minY = -700; dim2lotext = "White, UK"; dim2hitext = "Black, US"; } if (dim2 ==2){ maxY = 300; minY = -750; dim2lotext = "Electronic, ambient"; dim2hitext = "Guitar, lyrical"; }if (dim2 ==3){ maxY = 800; minY = -360; dim2lotext = "Acoustic"; dim2hitext = "Metal"; }if (dim2 ==4){ maxY = 700; minY = -300; dim2lotext = "New"; dim2hitext = "Old"; }if (dim2 ==5){ maxY = 400; minY = -750; dim2lotext = "Electronic, dance"; dim2hitext = "Guitar, angsty"; }if (dim2 ==6){ maxY = 410; minY = -700; dim2lotext = "Mainstream"; dim2hitext = "Experimental"; } } void keyPressed(){ if (key==CODED){ if (keyCode == UP){ pan(8); } if (keyCode == DOWN){ pan(2); } if (keyCode == LEFT){ pan(4); } if (keyCode == RIGHT){ pan(6); } } if (key=='a'||key=='A'){ zoom(1); } if (key=='z'||key=='Z'){ zoom(0); } if (key=='='){ changedim(1,1); } if (key=='-'){ changedim(0,1); } if (key==']'){ changedim(1,2); } if (key=='['){ changedim(0,2); } }