day 6 florence

Author
Published

April 6, 2025

I did not know that Florence Nightingale was also a data visualisation revolutionary, in addition to being a nurse and scientist. She realised that visualisations are important for telling data stories and her rose diagrams convinced Queen Victoria of the impact of sanitation on health for soldiers.

The Day 6 theme is Florence Nightingale, so I am on a mission to find an appropriate dataset.

Rose diagram by Florence Nightengale

This plot comparing the proportion of people willing to get the COVID vaccine in Australia and the USA illustrates how differences in public health policy can impact vaccine uptake.

It is interesting that across this period the proportion of people who were unvaccinated and unwilling remained pretty constant in the USA, whereas this proportion became smaller and smaller in Australia, as campaigns encouraging people to get vaccinated were rolled out.

The vaccination data seems like a good candidate for a rose diagram.

load packages

library(tidyverse)
library(owidapi)
library(scales)
library(ggeasy)
library(janitor)

read in the data

Here I am reading the data from Our World in Data and selecting/renaming variables.

vax <- read_csv("https://ourworldindata.org/grapher/covid-vaccine-willingness-and-people-vaccinated-by-month.csv?v=1&csvType=full&useColumnShortNames=true") %>%
  clean_names() %>%
  select(country = entity, date = day, unvax_unwilling = unwillingness_covid_vaccinate_this_week_pct_pop, 
         unvax_uncertain =  uncertain_covid_vaccinate_this_week_pct_pop , unvax_willing =  willingness_covid_vaccinate_this_week_pct_pop , vaccinated =  people_vaccinated_per_hundred ) 

clean it up

I am interested in the comparison between Australia and the US so filter for those two countries and then make the data long, so that the percent values appear in one column, and the status categories in another. I make the status column a factor and pull the month out of the date variable.

vax_long <- vax %>%
  filter(country %in% c("Australia", "United States")) %>%
  pivot_longer(names_to = "status", values_to = "percent", unvax_unwilling:vaccinated) %>%
  mutate(status = as_factor(status)) %>%
  mutate(month = month(date, label=TRUE))

glimpse(vax_long)
Rows: 84
Columns: 5
$ country <chr> "Australia", "Australia", "Australia", "Australia", "Australia…
$ date    <date> 2021-03-15, 2021-03-15, 2021-03-15, 2021-03-15, 2021-04-15, 2…
$ status  <fct> unvax_unwilling, unvax_uncertain, unvax_willing, vaccinated, u…
$ percent <dbl> 27.72, 19.80, 51.77, 0.71, 31.32, 20.13, 43.73, 4.82, 31.14, 2…
$ month   <ord> Mar, Mar, Mar, Mar, Apr, Apr, Apr, Apr, May, May, May, May, Ju…

plot

just Australia

OK I am going to start by plotting Australia first and getting column graph, before adding the coord_polar() below. I want the plot to start with the March data, so relevel month as a factor.

oz <- vax_long %>%
  filter(country == "Australia") 

oz$month <- fct_relevel(oz$month, "Mar", "Apr", "May", "Jun", "Jul", "Aug", 
                              "Sep", "Oct", "Nov", "Dec")

levels(oz$month)
 [1] "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec" "Jan" "Feb"
palette <- c("#c5001f","#f6b79b", "#a8d0e4", "#498dc0" )

oz %>%
  ggplot(aes(x = month, y = percent, fill = status)) +
  geom_col() +
  scale_fill_manual(values = palette)

Adding coord_polar() to turn it into a Florence Nightengale plot. Here I have removed the y axis, made the background white and moved the legend to the bottom.

oz %>%
  ggplot(aes(x = month, y = percent, fill = status)) +
  geom_col() +
  scale_fill_manual(values = palette) +
  coord_polar() +
  easy_remove_axes(which = "y") +
  theme(panel.background = element_rect(fill = 'white', colour = 'white')) +
  easy_move_legend(to = "bottom") 

both Australia and USA

Now I want to use facet_wrap() to get a plot that compares this pattern for the US and Australia. In looking at the data, the USA data only goes until Oct, so I am filtering so that I have the same months represented for each country.

months <- c("Mar", "Apr", "May", "Jun", "Jul", "Aug", 
                              "Sep", "Oct")

us_oz <- vax_long %>%
  filter(month %in% months)


us_oz %>%
  ggplot(aes(x = month, y = percent, fill = status)) +
  geom_col() +
  scale_fill_manual(values = palette) +
  coord_polar() +
  facet_wrap(~country) +
  easy_remove_axes(which = "y") +
  theme(panel.background = element_rect(fill = 'white', colour = 'white')) +
  easy_move_legend(to = "bottom") +
  labs(title = "Willingness to get vaccinated against COVID-19", 
       subtitle = "Mar 15, 2021 to Oct 15, 2021") +
  easy_remove_axes(which = "x", what = "title")

Success- this style of plot really nicely illustrates the lack change in willingness to get the COVID vaccine across this period in the US.