Data Visualisation

30 Day Chart Challenge 2025

The 30 Day Chart Challenge is a data visualisation challenge where participants create a chart for each daily prompt. In this blog post, I’ll recap the charts I made during the 2025 challenge and discuss the data and tools I used, alongside what I learned during the process.

Observable for R users

Observable is a JavaScript-based programming framework for data exploration and visualisation, which is popular for creating interactive charts and dashboards. This blog post demonstrates why and how R users can integrate Observable into their existing R workflows.

Creating data-driven art

If you’ve ever wondered what data-driven art is, or why people make it, then reading this blog post should help to answer those questions. It also includes an example of data-driven art, which can be created in Python or R, and talks through the process of getting started with your own art.

Designing monochrome data visualisations

In data visualisations, colours are often used to show values or categories of data. However, sometimes you might not be able to or want to use colour. This blog post discusses some tips for designing better visualisations when you’re restricted to a monochrome palette.

Working with colours in R

Whether you’re building data visualisations or generative art, at some point you will likely need to consider which colours to use in R. This blog post describes different ways to define colours, how to make good choices about colour palettes, and ways to generate your own colour schemes.

Parameterized plots and reports with R and Quarto

After running the ‘Parameterized plots and reports with R and Quarto’ workshop as part of the R/Pharma 2024 Conference, there were a few questions that we didn’t get the chance to answer. This blog post aims to answer some of them.

Five ways to improve your chart axes

A poor choice of axes for your chart can make it more difficult to understand, and in some cases, suggest misleading conclusions. In this blog post, we’ll look at five ways to make better choices about your axes and stop relying on default settings.

Creating typewriter-styled images in R

This blog post explains the process of manipulating images using {imager} in R, processing pixel data, and using it to create a new version of an image that looks like it was printed with a typewriter!

Annotated area charts with plotnine

The plotnine visualisation library brings the Grammar of Graphics to Python. This blog post walks you through the process of creating a customised, annotated area chart of coal production data.

What’s new in {PrettyCols} 1.1.0?

Series: {PrettyCols}

{PrettyCols} is an R package containing aesthetically pleasing colour palettes that are compatible with {ggplot2}. Find out about new features and palettes contained in the latest release!

Coloured text in {ggplot2}: {ggtext} vs {marquee}

An alternative to a traditional legend is using coloured text in a subtitle. In {ggplot2}, we can do this using the {ggtext} package. You can also do it using the new {marquee} package. How do they compare?

Sketchy waffle charts in R

Waffle charts can be used to visualise counts or percentages of categorical data. This blog post describes a slightly unusual solution to creating sketchy looking waffle charts in R using the {sf} and {roughsf} packages.

Data Visualisation

Data visualisation is essential for exploratory analysis, and for effectively communicating results.

Creating typewriter-styled maps in {ggplot2}

Inspired by RJ Andrews, I created a typewriter-styled map of Scotland using {ggplot2} in R. This blog post explains the process of gathering elevation data, selecting a suitable typewriter font, and coding up a map!

Adding social media icons to charts with {ggplot2}

Adding social media icons to your data visualisation is a great, concise way to put your name on your work, and make it easy for people to find your profile from your work. This blog post explains how to add social media icons to {ggplot2} charts.

Creating a cracked egg plot using {ggplot2} in R

Inspired by a Visual Capitalist chart, this blog post will show you how to utilise spatial data R packages in a slightly unusual way to create an infographic in the shape of a cracked egg in R.

What’s new in {PrettyCols} 1.0.1?

Series: {PrettyCols}

{PrettyCols} is an R package containing aesthetically pleasing colour palettes that are compatible with {ggplot2}. Find out about new features and palettes contained in the latest release!

Another Year of #TidyTuesday

After another 52 data visualisations created for #TidyTuesday, it’s time for the annual round-up! Read this blog post for some interesting R packages discovered, a few new I’ve tricks learnt, and the data visualisations I’d like to do again.

R packages for visualising spatial data

Throughout the #30DayChartChallenge I made most of my maps with R. This blog post details the R packages I find myself using most often when visualising spatial data.

How to make your own #RStats Wrapped!

Forget about Spotify Wrapped and make your own #RStats Wrapped instead! This blog post will show you how to find your most used functions and make a graphic with {ggplot2}!

30 Day Map Challenge 2022

The #30DayMapChallenge is a month-long mapping, cartography, and data visualization challenge aimed at the spatial community. Here are the things I’ve learnt from participating in the challenge for a second time.

Mapping a marathon with {rStrava}

This tutorial blog will walk through the process of getting data from Strava using {rStrava}, making a map of it, and animating the map with {gganimate}.

Creating flowcharts with {ggplot2}

Flowcharts can be a useful way to visualise complex processes. This tutorial blog will explain how to create one using {igraph} and {ggplot2}.

30 Day Chart Challenge 2022

The #30DayChartChallenge is a data visualisation challenge where participants create a chart for each daily prompt.

Getting started with {gt} tables

{gt} is an R package designed to make it easy to make good looking tables. This blog post demonstrates how to add plots as a column in a {gt} table.

A Year of #TidyTuesday

One of my goals for 2021 was to participate in the #TidyTuesday challenge on a regular basis. This blog post reflects on the past year of data visualisations.

#CottonViz Data Visualisation Challenge

In June, the #CottonViz data visualisation challenge was run by the History of Statistics & Young Statisticians sections of the Royal Statistical Society (RSS).