Side projects in visualisation and data stories
Most of my visualisation work happens in R, but I wanted to learn how interactive graphics are built on the web. I also wanted to try telling a story with data instead of just showing a chart. These are the small projects that came out of that.
Learning D3 and Svelte
30 Day Chart Challenge 2025
I joined the #30DayChartChallenge to learn interactive graphics with D3 and Svelte, one chart a day. I made it through the first five prompts:
- Fractions: the proportions of Pokémon types across generations (fewer water types lately).
- Slope: Pokémon Attack against Defense, with sliders that change how the trend looks.
- Circle: Bob Ross’s whole palette, sized by how often each colour was used each season.
- Big or small: plastic and glass bottles collected each day in 2022.
- Ranking: gender disparity among International Mathematical Olympiad contestants.
D3 Svelte
Pixar films
A D3 and Svelte chart built from the TidyTuesday Pixar films dataset. It asks whether Pixar’s films have got shorter to suit shrinking attention spans, comparing runtimes over time for G and PG films. They haven’t.
D3 Svelte TidyTuesday
Scrollytelling with Closeread
Closeread is a Quarto extension for scrollytelling: the text scrolls past while a chart, image or passage stays pinned and changes with it. I tried it in two very different pieces.
Love comes with a price
A data journalism attempt. I went through Bumble’s financial reports since its 2021 IPO, following paying users and the average revenue per paying user, to ask whether paying for Bumble Premium is worth it. Paying users keep growing, but revenue per paying user has fallen since 2021, which suggests people aren’t committing to long subscriptions.
Closeread Data journalism
Icarian by Hozier
A literary analysis of Hozier’s I, Carrion (Icarian), written after his Melbourne concert. It reads the lyrics verse by verse through the myth of Icarus and the idea of the “Atlas” personality, and ends on love as a shared burden.
Closeread Literary analysis