xxxxxxxxxx
let num = 267; // number of items
let rad = 4; // radius of each white circle particle
let angle = 0;
let data;
function preload() {
data = loadTable(
"https://deckard.openprocessing.org/user368983/visual1870774/h8bf69b5f34213ff04fc5d988a2165f04/Life%20-%20API_SP.DYN.LE00.IN_DS2_en_csv_v2_5068968.csv",
"csv",
"header");
}
function setup() {
createCanvas(windowWidth, windowHeight);
background(200);
angleMode(DEGREES);
print(data.getColumn("Country Name"));
print(data.getColumn("1960"));
}
function draw() {
background(0);
push();
translate(width / 2, height / 2);
// circle line
noFill();
strokeWeight(2.5);
stroke('#E7B10A');
circle(0, 0, 500);
stroke('#609966');
circle(0, 0, 450);
stroke('#DF2E38');
circle(0, 0, 400);
stroke('#4E31AA');
circle(0, 0, 350);
stroke('#820000');
circle(0, 0, 300);
stroke('#A7727D');
circle(0, 0, 250);
stroke('#674188');
circle(0, 0, 200);
//Navigation Lines
stroke('#E7B10A');
line(400,-300,450,-300)
stroke('#609966');
line(400,-280,450,-280)
stroke('#DF2E38');
line(400,-260,450,-260)
stroke('#4E31AA');
line(400,-240,450,-240)
stroke('#820000');
line(400,-220,450,-220)
stroke('#A7727D');
line(400,-200,450,-200)
stroke('#674188');
line(400,-180,450,-180)
//Navigation Circles
fill('#FF0000');
noStroke();
circle(425, -140, rad);
fill('#F0FF42');
circle(425, -120, rad);
fill('#7F167F');
circle(425, -100, rad);
fill('#F207CB');
circle(425, -80, rad);
fill('#FFA500');
circle(425, -60, rad);
fill('#00FF00');
circle(425, -40, rad);
fill('#0000FF');
circle(425, -20, rad);
// dots
// 1960 Lifetime
num = data.getColumn("Country Name").length;
for (let j = 0; j < num; j++) {
angle = (350 / num) * j;
let x = 250 * cos(angle);
let y = 250 * sin(angle);
let lifeExpectancy = data.get(j, "2020");
if (Number(lifeExpectancy)) {
if (lifeExpectancy >= 30 && lifeExpectancy < 40) {
fill('#0000FF');
} else if (lifeExpectancy >= 40 && lifeExpectancy < 50) {
fill('#00FF00');
} else if (lifeExpectancy >= 50 && lifeExpectancy < 60) {
fill('#FFA500');
} else if (lifeExpectancy >= 60 && lifeExpectancy < 70) {
fill('#F207CB');
} else if (lifeExpectancy >= 70 && lifeExpectancy < 80) {
fill('#7F167F');
} else if (lifeExpectancy >= 80 && lifeExpectancy < 90) {
fill('#F0FF42');
} else if (lifeExpectancy >= 90) {
fill('#FF0000');
} else {
fill('#FFFFFF');
}
circle(x, y, rad * 1.5);
let name = data.getString(j, "Country Name");
push();
translate(x,y);
rotate(angle);
textAlign(LEFT, CENTER);
textSize(6);
fill(255);
text(name, 5, 0);
pop();
}
noStroke();
}
// 1960 Lifetime
// 1970 Lifetime
for (let j = 0; j < num; j++) {
angle = (350 / num) * j;
let x = 225 * cos(angle);
let y = 225 * sin(angle);
let lifeExpectancy = data.get(j, "2010");
if (Number(lifeExpectancy)) {
if (lifeExpectancy >= 30 && lifeExpectancy < 40) {
fill('#0000FF');
} else if (lifeExpectancy >= 40 && lifeExpectancy < 50) {
fill('#00FF00');
} else if (lifeExpectancy >= 50 && lifeExpectancy < 60) {
fill('#FFA500');
} else if (lifeExpectancy >= 60 && lifeExpectancy < 70) {
fill('#F207CB');
} else if (lifeExpectancy >= 70 && lifeExpectancy < 80) {
fill('#7F167F');
} else if (lifeExpectancy >= 80 && lifeExpectancy < 90) {
fill('#F0FF42');
} else if (lifeExpectancy >= 90) {
fill('#FF0000');
} else {
fill('#FFFFFF');
}
circle(x, y, rad * 1.3);
}
noStroke();
}
// 1970 Lifetime
// 1980 Lifetime
for (let j = 0; j < num; j++) {
angle = (350 / num) * j;
let x = 200 * cos(angle);
let y = 200 * sin(angle);
let lifeExpectancy = data.get(j, "2000");
if (Number(lifeExpectancy)) {
if (lifeExpectancy >= 30 && lifeExpectancy < 40) {
fill('#0000FF');
} else if (lifeExpectancy >= 40 && lifeExpectancy < 50) {
fill('#00FF00');
} else if (lifeExpectancy >= 50 && lifeExpectancy < 60) {
fill('#FFA500');
} else if (lifeExpectancy >= 60 && lifeExpectancy < 70) {
fill('#F207CB');
} else if (lifeExpectancy >= 70 && lifeExpectancy < 80) {
fill('#7F167F');
} else if (lifeExpectancy >= 80 && lifeExpectancy < 90) {
fill('#F0FF42');
} else if (lifeExpectancy >= 90) {
fill('#FF0000');
} else {
fill('#FFFFFF');
}
circle(x, y, rad);
}
noStroke();
}
// 1980 Lifetime
// 1990 Lifetime
for (let j = 0; j < num; j++) {
angle = (350 / num) * j;
let x = 175 * cos(angle);
let y = 175 * sin(angle);
let lifeExpectancy = data.get(j, "1990");
if (Number(lifeExpectancy)) {
if (lifeExpectancy >= 30 && lifeExpectancy < 40) {
fill('#0000FF');
} else if (lifeExpectancy >= 40 && lifeExpectancy < 50) {
fill('#00FF00');
} else if (lifeExpectancy >= 50 && lifeExpectancy < 60) {
fill('#FFA500');
} else if (lifeExpectancy >= 60 && lifeExpectancy < 70) {
fill('#F207CB');
} else if (lifeExpectancy >= 70 && lifeExpectancy < 80) {
fill('#7F167F');
} else if (lifeExpectancy >= 80 && lifeExpectancy < 90) {
fill('#F0FF42');
} else if (lifeExpectancy >= 90) {
fill('#FF0000');
} else {
fill('#FFFFFF');
}
circle(x, y, rad * 0.9);
}
noStroke();
}
// 1990 Lifetime
// 2000 Lifetime
for (let j = 0; j < num; j++) {
angle = (350 / num) * j;
let x = 150 * cos(angle);
let y = 150 * sin(angle);
let lifeExpectancy = data.get(j, "1980");
if (Number(lifeExpectancy)) {
if (lifeExpectancy >= 30 && lifeExpectancy < 40) {
fill('#0000FF');
} else if (lifeExpectancy >= 40 && lifeExpectancy < 50) {
fill('#00FF00');
} else if (lifeExpectancy >= 50 && lifeExpectancy < 60) {
fill('#FFA500');
} else if (lifeExpectancy >= 60 && lifeExpectancy < 70) {
fill('#F207CB');
} else if (lifeExpectancy >= 70 && lifeExpectancy < 80) {
fill('#7F167F');
} else if (lifeExpectancy >= 80 && lifeExpectancy < 90) {
fill('#F0FF42');
} else if (lifeExpectancy >= 90) {
fill('#FF0000');
} else {
fill('#FFFFFF');
}
circle(x, y, rad * 0.8);
}
noStroke();
}
// 2000 Lifetime
// 2010 Lifetime
for (let j = 0; j < num; j++) {
angle = (350 / num) * j;
let x = 125 * cos(angle);
let y = 125 * sin(angle);
let lifeExpectancy = data.get(j, "1970");
if (Number(lifeExpectancy)) {
if (lifeExpectancy >= 30 && lifeExpectancy < 40) {
fill('#0000FF');
} else if (lifeExpectancy >= 40 && lifeExpectancy < 50) {
fill('#00FF00');
} else if (lifeExpectancy >= 50 && lifeExpectancy < 60) {
fill('#FFA500');
} else if (lifeExpectancy >= 60 && lifeExpectancy < 70) {
fill('#F207CB');
} else if (lifeExpectancy >= 70 && lifeExpectancy < 80) {
fill('#7F167F');
} else if (lifeExpectancy >= 80 && lifeExpectancy < 90) {
fill('#F0FF42');
} else if (lifeExpectancy >= 90) {
fill('#FF0000');
} else {
fill('#FFFFFF');
}
circle(x, y, rad * 0.7);
}
noStroke();
}
// 2010 Lifetime
// 2020 Lifetime
for (let j = 0; j < num; j++) {
angle = (350 / num) * j;
let x = 100 * cos(angle);
let y = 100 * sin(angle);
let lifeExpectancy = data.get(j, "1960");
if (Number(lifeExpectancy)) {
if (lifeExpectancy >= 30 && lifeExpectancy < 40) {
fill('#0000FF');
} else if (lifeExpectancy >= 40 && lifeExpectancy < 50) {
fill('#00FF00');
} else if (lifeExpectancy >= 50 && lifeExpectancy < 60) {
fill('#FFA500');
} else if (lifeExpectancy >= 60 && lifeExpectancy < 70) {
fill('#F207CB');
} else if (lifeExpectancy >= 70 && lifeExpectancy < 80) {
fill('#7F167F');
} else if (lifeExpectancy >= 80 && lifeExpectancy < 90) {
fill('#F0FF42');
} else if (lifeExpectancy >= 90) {
fill('#FF0000');
} else {
fill('#FFFFFF');
}
circle(x, y, rad * 0.6);
}
noStroke();
}
// 2020 Lifetime
fill('#F7F5EB');
textSize(10);
text('2020', 460, -300);
text('2010', 460, -280);
text('2000', 460, -260);
text('1990', 460, -240);
text('1980', 460, -220);
text('1970', 460, -200);
text('1960', 460, -180);
textSize(10);
textAlign(CENTER, CENTER);
text('<90', 440, -140);
text('<80', 440, -120);
text('<70', 440, -100);
text('<60', 440, -80);
text('<50', 440, -60);
text('<40', 440, -40);
text('<30', 440, -20);
pop();
noLoop();
}