The Measles Map: Country-wise Incidence Since 2014
Facetted world map showing annual measles cases per million from 2014 to 2025 using provisional WHO data.
#TidyTuesday
Maps
{sf}
Author
Aditya Dahiya
Published
July 2, 2025
About the Data
This dataset presents provisional global measles and rubella case reports compiled by the World Health Organization (WHO), and was downloaded on June 12, 2025. It includes both monthly and annual figures reported by WHO Member States, covering suspected, clinically-compatible, epidemiologically-linked, and laboratory-confirmed cases. The cases_month.csv file provides monthly data by country and region, while the cases_year.csv file aggregates annual totals alongside population estimates and incidence rates. As noted by WHO, all data are provisional and subject to updates; official statistics are released each July through the WHO–UNICEF joint data collection. Users citing figures from this dataset should clearly reference the source and date, e.g., “provisional data based on monthly reports to WHO (Geneva) as of June 2025.” The data has drawn attention amid rising measles cases in the USA, but it underscores that measles remains a global threat. This week’s dataset was curated by Jen Richmond of R-Ladies Sydney for the #TidyTuesday data science community.
Figure 1: Facetted world map showing annual measles incidence (new cases per million population) from 2014 to 2025. Data are provisional and sourced from monthly WHO reports. Incidence values include suspected, confirmed, and epidemiologically linked cases as reported by Member States. Population estimates are based on WHO figures.
How the Graphic Was Created
Loading required libraries
Code
pacman::p_load( tidyverse, # All things tidy scales, # Nice Scales for ggplot2 fontawesome, # Icons display in ggplot2 ggtext, # Markdown text support for ggplot2 showtext, # Display fonts in ggplot2 colorspace, # Lighten and Darken colours patchwork # Composing Plots)# Option 2: Read directly from GitHubcases_month <- readr::read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/main/data/2025/2025-06-24/cases_month.csv')cases_year <- readr::read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/main/data/2025/2025-06-24/cases_year.csv')
Visualization Parameters
Code
# Font for titlesfont_add_google("Barlow",family ="title_font") # Font for the captionfont_add_google("Barlow Condensed",family ="caption_font") # Font for plot textfont_add_google("Barlow Semi Condensed",family ="body_font") showtext_auto()# A base Colourbg_col <-"white"seecolor::print_color(bg_col)# Colour for highlighted texttext_hil <-"grey20"seecolor::print_color(text_hil)# Colour for the texttext_col <-"grey20"seecolor::print_color(text_col)line_col <-"grey30"# Define Base Text Sizebts <-90# Caption stuff for the plotsysfonts::font_add(family ="Font Awesome 6 Brands",regular = here::here("docs", "Font Awesome 6 Brands-Regular-400.otf"))github <-""github_username <-"aditya-dahiya"xtwitter <-""xtwitter_username <-"@adityadahiyaias"social_caption_1 <- glue::glue("<span style='font-family:\"Font Awesome 6 Brands\";'>{github};</span> <span style='color: {text_hil}'>{github_username} </span>")social_caption_2 <- glue::glue("<span style='font-family:\"Font Awesome 6 Brands\";'>{xtwitter};</span> <span style='color: {text_hil}'>{xtwitter_username}</span>")plot_caption <-paste0("**Data:** World Health Organization", " | **Code:** ", social_caption_1, " | **Graphics:** ", social_caption_2 )rm(github, github_username, xtwitter, xtwitter_username, social_caption_1, social_caption_2)# Add text to plot-------------------------------------------------plot_subtitle <-str_wrap("Measles Incidence (New cases per million population)", 85)str_view(plot_subtitle)plot_title <-"Measles Incidence"
# Saving a thumbnaillibrary(magick)# Saving a thumbnail for the webpageimage_read(here::here("data_vizs", "tidy_usa_measles.png")) |>image_resize(geometry ="x400") |>image_write( here::here("data_vizs", "thumbnails", "tidy_usa_measles.png" ) )
Session Info
Code
pacman::p_load( tidyverse, # All things tidy scales, # Nice Scales for ggplot2 fontawesome, # Icons display in ggplot2 ggtext, # Markdown text support for ggplot2 showtext, # Display fonts in ggplot2 colorspace, # Lighten and Darken colours patchwork # Composing Plots)sessioninfo::session_info()$packages |>as_tibble() |> dplyr::select(package, version = loadedversion, date, source) |> dplyr::arrange(package) |> janitor::clean_names(case ="title" ) |> gt::gt() |> gt::opt_interactive(use_search =TRUE ) |> gtExtras::gt_theme_espn()
Table 1: R Packages and their versions used in the creation of this page and graphics