fractalkitty looking for math? fractalkitty.com

all

data doodle - Salem OR temperature data

#trig#interactive#data#weather

salemsalem_maxdataSdataSMaxtemperaturestMaxvisuals

let salem;
let salem_max;
let dataS = [];
let dataSMax = [];
let temperatures = [];
let tMax = [];
let c = 0;
function preload() {
  salem = loadTable(
    "/assets/temps_average%20-%20Sheet1.csv"
  );
  salem_max = loadTable("/assets/temps_max.csv");
}

function setup() {
  createCanvas(500, 500);
  background(40, 40, 60);
  dataS = [];
  dataSMax = [];
  temperatures = [];
  tMax = [];
  dataS = salem.getArray();
  dataSMax = salem_max.getArray();

  for (let i = 1; i < dataS.length; i++) {
    temperatures[i - 1] = [];
    for (let j = 0; j < 14; j++) {
      if (dataS[i][j] != "M") {
        temperatures[i - 1][j] = int(dataS[i][j]);
      } else {
        temperatures[i - 1][j] = -999;
      }
    }
  }

  for (let i = 1; i < dataSMax.length; i++) {
    tMax[i - 1] = [];
    for (let j = 0; j < 14; j++) {
      if (dataSMax[i][j] != "M") {
        tMax[i - 1][j] = int(dataSMax[i][j]);
      } else {
        tMax[i - 1][j] = -999;
      }
    }
  }
  noLoop();
}
function draw() {
  translate(width / 2, width / 2);
  visuals(c);
}

function visuals(v) {
  if (v == 0) {
    noFill();
    strokeWeight(2);
    for (let i = 0; i < temperatures.length - 1; i++) {
      for (let j = 1; j < 13; j++) {
        temp = temperatures[i][j];
        r = (temperatures[i][0] - temperatures[1][0] + 2) * 3.5;
        stroke(temp * 2.5, temp * 2.5, temp * 3);
        if (temp != -999) {
          arc(0, 0, r, r, (PI / 6) * j, (PI / 6) * (j + 1));
        }
      }
    }

    for (let i = 0; i < tMax.length - 1; i++) {
      for (let j = 1; j < 13; j++) {
        temp = tMax[i][j];
        r = (tMax[i][0] - tMax[1][0] + 2) * 3.5;
        stroke(temp * 2.5, temp * 2.5, temp * 3);
        if (temp != -999) {
          arc(0, 0, r, r, (PI / 6) * j + PI / 12, (PI / 6) * (j + 1));
        }
      }
    }
  }

  if (v == 1) {
    noFill();
    strokeWeight(0.8);
    stroke(200, 200, 250);
    for (let i = 0; i < temperatures.length - 1; i++) {
      for (let j = 1; j < 13; j++) {
        temp = temperatures[i][j];
        fill(temp * 3.5, temp * 3, temp * 3);
        noStroke();
        r = (temperatures[i][0] - temperatures[1][0] + 2) * 2.5 + temp / 5;
        if (temp != -999) {
          rect(
            -width / 2 + (width / 13) * j - width / 26,
            -height / 2 + i * 2.5 + 100,
            width / 13,
            2.6
          );
        } else {
        }
      }
    }
  }

  if (v == 2) {
    noFill();
    strokeWeight(1);
    for (let i = 0; i < temperatures.length - 1; i++) {
      for (let j = 1; j < 13; j++) {
        temp = temperatures[i][j];
        r = (temperatures[i][0] - temperatures[1][0] + 2) * 3.5;
        stroke(temp * 2.5, temp * 2.5, temp * 3, 100);
        if (temp != -999) {
          circle(
            (r * sin((PI / 6) * j + (PI / 360) * i)) / 2,
            (r * cos((PI / 6) * j + (PI / 360) * i)) / 2,
            3 + temp / 2
          );
        }
      }
    }

    for (let i = 0; i < tMax.length - 1; i++) {
      for (let j = 1; j < 13; j++) {
        temp = tMax[i][j];
        r = (tMax[i][0] - tMax[1][0] + 2) * 3.5;
        stroke(temp * 2.5, temp * 2.5, temp * 3, 100);
        if (temp != -999) {
          circle(
            (r * sin((PI / 6) * j + (PI / 360) * i + PI / 12)) / 2,
            (r * cos((PI / 6) * j + (PI / 360) * i + PI / 12)) / 2,
            3 + temp / 4
          );
        }
      }
    }
  }
}

function mousePressed() {
  if (c < 2) {
    c++;
  } else {
    c = 0;
  }

  setup();
  draw();
}