Data Visualization
For this week’s assignment, an animated visualization of global temperature data from 1880 to today. The sketch fetches real data from NASA’s GISS API and draws it as a bar chart. Blue bars mean cooler-than-average years. Red bars mean warmer-than-average years. As the bars animate in, poetic phrases appear based on the temperature, giving the data a human, storytelling feel.
Controls: Click to pause/play · Hover bars for details · Press R to restart · Press S to save · Spacebar to toggle
Code I Am Proud Of
The part I am most proud of is how the bars get their color. Instead of just picking “blue” or “red,” I used lerpColor() to blend between shades based on the actual temperature value. Colder years get a deeper blue, and warmer years get a more intense red. It makes the warming trend really pop visually:
// Color: blue for cold, red for warm
let barColor;
if (d.anomaly < 0) {
barColor = lerpColor(
color(70, 130, 200, 200),
color(40, 80, 160, 200),
map(d.anomaly, 0, -0.5, 0, 1)
);
} else {
barColor = lerpColor(
color(200, 100, 70, 200),
color(240, 60, 40, 220),
map(d.anomaly, 0, 1.5, 0, 1)
);
}
I also like the generative text system. Each time a new data point appears, the sketch picks a phrase from a pool that matches the temperature: cold, warm, or neutral. It is a simple idea but it adds a lot of personality to the piece:
function triggerPhrase(anomaly) {
if (millis() - lastPhraseTime < 1200) return;
let phrases;
if (anomaly < -0.1) {
phrases = coldPhrases;
} else if (anomaly > 0.3) {
phrases = warmPhrases;
} else {
phrases = neutralPhrases;
}
activePhrase = random(phrases);
phraseTargetAlpha = 255;
lastPhraseTime = millis();
}
What I Learned
Working with a real API changed everything. The full 145-year dataset tells a story on its own. You can see the blue bars dominate the early decades, then the reds creep in and accelerate. I did not need to editorialize; the shape of the data is the narrative. The hardest part was dealing with CORS issues and making sure broken data rows do not crash the sketch.
Data: NASA GISS Surface Temperature Analysis · Built with p5.js · February 2026