This post explains how to build and customize a
            bump plot with R. It uses the
            ggbump package, provides
            reproducible code and explain how input data must be formatted.
For
            an introduction to bump plots, see
            this introduction.
          
          The ggbump package provides a
          geom_bump() function that allows to
          build ggbump charts.
        
Install the package with install.packages("ggbump").
The input dataset is simple: we just have 3 groups, with one value per group and per year. Here is how to build it:
# Library
#install.packages("ggbump")
library(ggbump)
library(tidyverse)
# Create data
year <- rep(2019:2021, 3)
products_sold <- c(
  500, 600, 700,
  550, 650, 600,
  600, 400, 500
)
store <- c(
  "Store A", "Store A", "Store A",
  "Store B", "Store B", "Store B",
  "Store C", "Store C", "Store C"
)
# Create the new dataframe
df <- data.frame(
  year = year,
  products_sold = products_sold,
  store = store
)
          Thanks to the geom_bump() function, we can easily build a
          ggbump chart.
        
ggplot(df, aes(x = year, y = products_sold, color = store)) +
  geom_bump(size = 2) +
  geom_point(size = 6)
           
        
          It is possible to add individual points to the bump
          chart. This is done by adding a geom_point() layer.
        
ggplot(df, aes(x = year, y = products_sold, color = store)) +
  geom_bump(size = 2) +
  geom_point(size = 6) +
  scale_color_brewer(palette = "Paired") +
  theme_minimal()
           
        
          The geom_text() and labs() functions can be
          used to add labels and a title to the chart.
        
ggplot(df, aes(x = year, y = products_sold, color = store)) +
  geom_bump(size = 2) +
  geom_point(size = 6) +
  geom_text(aes(label = store), nudge_y = 20, fontface = "bold", size=3) +
  scale_color_brewer(palette = "Paired") +
  theme_minimal() +
  labs(
    title = "Products sold per store",
    x = "Year",
    y = "Products sold"
  )
           
        
You might be interested in
👋 After crafting hundreds of R charts over 12 years, I've distilled my top 10 tips and tricks. Receive them via email! One insight per day for the next 10 days! 🔥