Miami Dolphin’s EPA success alluvial plot, by down and play call

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.2     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.3     ✔ tibble    3.2.1
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggalluvial)
setwd("C:\\Users\\Sam.Fraley\\National Football League\\Next Gen Stats - Research\\Seasonal Analyst Folders\\Sam Fraley\\R\\Offense")

library(easyalluvial)
library(parcats)
data1 <- read.csv("alluv.csv")


data1b <- data1 %>%
  mutate(down = case_when(down == 1 ~ "1st Down",
                          down == 2 ~ "2nd Down",
                          down == 3 ~ "3rd Down",
                          down == 4 ~ "4th Down"))
df.expanded <- data1b[rep(row.names(data1b), data1b$freq), 1:3]

suppressPackageStartupMessages( require(parcats) )

p = alluvial_wide(df.expanded, max_variables = 3)

parcats(p, marginal_histograms = TRUE, data_input = df.expanded)