
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.
Install the released version from CRAN:
install.packages("moveEZ")Or install the development version from GitHub:
# install.packages("devtools")
devtools::install_github("MuViSU/moveEZ")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).
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)vignette("moveEZ")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é.