# Animating Tracking Data

For the following vignette, you’ll need the `sportyR`, `ggplot2`, and `gganimate` packages loaded into your workspace.

    library(sportyR)
    library(ggplot2)
    library(gganimate)
    #> No renderer backend detected. gganimate will default to writing frames to separate files
    #> Consider installing:
    #> - the `gifski` package for gif output
    #> - the `av` package for video output
    #> and restarting the R session

If this is your first experience with plotting tracking data, please check out the plotting-tracking-data vignette. Otherwise, let’s see how to make GIFs with `sportyR` and `gganimate`.

## The Data

For this example, we’ll use a play from Week 15 of the 2018 NFL season between the Chicago Bears and Green Bay Packers. Data made available for the Big Data Bowl 2021 Kaggle competition.

    # Load the play data
    example_nfl_play <- data.table::fread(
      glue::glue(
        "https://raw.githubusercontent.com/sportsdataverse/sportyR/",
        "main/data-raw/example-pbp-data.csv"
      )
    )

    # Convert to data frame
    example_nfl_play <- as.data.frame(example_nfl_play)

To keep things easy, let’s specify the colors for each team’s dots on the resulting GIF. We’ll make the Bears orange and the Packers yellow. The football will also need a dot to be seen; let’s make it brown.

    # Prep data for plotting
    example_nfl_play[example_nfl_play["team"] == "home", "color"] <- "#c83803"
    example_nfl_play[example_nfl_play["team"] == "away", "color"] <- "#ffb612"
    example_nfl_play[example_nfl_play["team"] == "football", "color"] <- "#624a2e"

First, let’s draw an NFL field via `geom_football("nfl")`. We’ll adjust the origin to be in the lower left corner of the field, as per the notes on the coordinate system on the Kaggle page describing the data.

    # Create the field
    nfl_field <- geom_football("nfl", x_trans = 60, y_trans = 26.6667)

    # Display the field
    nfl_field

Image of NFL field rendered from sportyR

Looks good! Now, let’s animate using `gganimate`.

    # Add the points on the field
    play_anim <- nfl_field +
      geom_point(
        data = example_nfl_play,
        aes(x, y),
        color = example_nfl_play$color
      ) +
      transition_time(example_nfl_play$frameId)

    # Show the animation
    play_anim

Gif of tracking data

Easy peasy. As noted on the plotting-tracking-data vignette, this too works so long as the geospatial data is provided and contains a way to identify and order the frames of the resulting GIF.