This repository has been archived on 2022-08-01. You can view files and clone it, but cannot push or open issues or pull requests.
War-Visualisation/src/WarsVisualisation.pde

97 lines
3.1 KiB
Plaintext
Executable File

// WarsVisualisation.pde - plots wars sized by casualties along a timeline 1800--2000
String data_src = "wars.csv"; // the data file to be used
Table warTable; // declare table object to hold data (see class Table)
int rowCount; // to store how many rows there are in the table
color col1 = #0000ff; // use blue as start of range for lerpColor function
color col2 = #ff0000; // use green as end of range for lerpColor function
int dataMin = MAX_INT; // for holding the max and min death counts
int dataMax = MIN_INT;
float ratio; // for holding the ratio between max and min
void setup() {
size(1840, 600); // set up sketch display window
background(#000000); // set background to black
warTable = new Table(data_src); // create new table from data file
rowCount = warTable.getRowCount();
PFont font;
font = createFont("Arial",16,true);
textFont(font, 32);
fill(#ffffff);
// draws the two horizontal lines
stroke(#ffffff);
line(20,200,1820,200);
line(20,400,1820,400);
int labelY1 = 190;
int labelY2 = 390;
// draws the vertical incremental lines
for(int div = 20, year = 1800; div <= 1823; div = div + 9, year++) {
textAlign(CENTER);
textSize(8);
line(div,197,div,203);
line(div,397,div,403);
if (year % 2 == 0) {
text(year,div,labelY1);
if (labelY1 == 190) labelY1 = 215;
else labelY1 = 190;
text(year,div,labelY2);
if (labelY2 == 390) labelY2 = 415;
else labelY2 = 390;
}
textAlign(LEFT) ;
textSize(14);
text("Wars 1800--2000, sized by # of deaths", 20, 160);
text("Wars 1800--2000, coloured by # of deaths", 20, 360);
}
// loop through each row of data
// ignoring row 0, the 'header'
for(int row = 1; row < rowCount; row++) {
int deaths = warTable.getInt(row, 15);
if (deaths > dataMax)
dataMax = deaths;
if (deaths < dataMin)
dataMin = deaths;
ratio = dataMax/dataMin;
}
int yrBeg, yrEnd, deaths;
int offset = 0;
// populates the values for the wars
for(int row = 1; row < rowCount; row++) {
yrBeg = warTable.getInt(row, 2);
yrEnd = warTable.getInt(row, 5);
deaths = warTable.getInt(row, 15);
float percent = norm(deaths, dataMin, dataMax);
float newPercent = lerp(0,500,percent);
// draws the sized top line values
stroke(200,50);
strokeWeight(newPercent);
line(yearToLine(yrBeg), 200, yearToLine(yrEnd), 200);
// colours the bottom line values
stroke(lerpColor(#61e2f0, #296f34, percent, HSB));
strokeWeight(5);
line(yearToLine(yrBeg), 400, yearToLine(yrEnd), 400);
// adds a label for the war, with an offset
// that means no labels overlap
textSize(9);
text(warTable.getString(row, 1), yearToLine(yrBeg), 440+offset);
offset = offset + 10;
if (offset == 100) offset = 0;
}
}
// converts a year to an x-coord
int yearToLine(int year) {
return (year - 1800)*9;
}