moveEZ

moveEZ (pronounced move easy) extends the biplotEZ package to animate PCA biplots across the ordered levels of a categorical variable. Rather than producing a separate static biplot per level, which fragments sequential information and makes gradual structural change difficult to perceive, moveEZ renders transitions between levels as a continuous animation.

Installation

Install the released version from CRAN:

install.packages("moveEZ")

Or install the development version from GitHub:

# install.packages("devtools")
devtools::install_github("MuViSU/moveEZ")

Overview

moveEZ animates PCA biplots across the ordered levels of a categorical variable — referred to as the time variable. This variable need not represent chronological time; it may be any ordered index such as experimental stages, algorithmic iterations, or measurement occasions. Each distinct level of the time variable defines a time slice: the subset of observations corresponding to that level.

The package provides three animation functions of increasing methodological complexity:

Function PCA computed Variable vectors Alignment
moveplot() Once, on full dataset Fixed Not required
moveplot2() Per time slice Dynamic Manual (align.time, reflect)
moveplot3() Per time slice Dynamic Automated (GPA)

All three functions support animated output (move = TRUE) and static faceted output (move = FALSE).

Basic usage

library(moveEZ)
library(biplotEZ)

data("Africa_climate")

bp <- biplot(Africa_climate, scaled = TRUE) |>
  PCA(group.aes = Africa_climate$Region) |>
  samples(opacity = 0.8) |>
  plot()

# Static faceted display
bp |> moveplot(time.var = "Year", group.var = "Region",
               hulls = TRUE, move = FALSE)

# Animated display
bp |> moveplot(time.var = "Year", group.var = "Region",
               hulls = TRUE, move = TRUE)

Learn more

Report bugs and get support

If you encounter any issues or have questions, please open an issue on the GitHub repository.

Logo concept developed with assistance from OpenAI’s ChatGPT (https://openai.com/chatgpt); final design by Raeesa and Johané.