Los ejemplos de este tutorial utilizan el dataset gapminder, que contiene datos de PIB per cápita, esperanza de vida y población de 142 países a lo largo de 12 años.
# install.packages("gapminder")
library(gapminder)
df <- gapminder
transition_time()
transition_time() anima los datos a lo largo de una variable temporal continua. Pasa la columna de tiempo a la función y gganimate interpolará fotogramas entre cada valor.
También necesitas el paquete gifski instalado como renderizador de GIF.
# install.packages("gganimate")
# install.packages("gifski")
library(ggplot2)
library(gganimate)
library(gapminder)
ggplot(gapminder, aes(x = gdpPercap, y = lifeExp,
size = pop, color = continent)) +
geom_point(alpha = 0.7) +
scale_x_log10() +
scale_size(range = c(2, 12), guide = "none") +
transition_time(year)

Mostrar el valor del fotograma actual
Usa {frame_time} dentro de labs() para mostrar el valor temporal en el título u otras etiquetas. Puedes envolverlo con round() para eliminar los decimales.
library(ggplot2)
library(gganimate)
library(gapminder)
ggplot(gapminder, aes(x = gdpPercap, y = lifeExp,
size = pop, color = continent)) +
geom_point(alpha = 0.7) +
scale_x_log10() +
scale_size(range = c(2, 12), guide = "none") +
transition_time(year) +
labs(title = "Year: {round(frame_time)}",
x = "GDP per capita", y = "Life expectancy")

transition_states()
transition_states() está diseñado para categorías discretas. Transiciona entre estados definidos por una variable de agrupación. Usa {closest_state} en labs() para mostrar el estado activo.
transition_length controla cuánto dura cada transición y state_length cuánto tiempo se mantiene cada estado.
# install.packages("dplyr")
library(dplyr)
library(ggplot2)
library(gganimate)
library(gapminder)
df <- gapminder %>%
filter(year %in% c(1952, 1972, 1992, 2007)) %>%
group_by(year, continent) %>%
summarise(mean_life = mean(lifeExp))
ggplot(df, aes(x = continent, y = mean_life, fill = continent)) +
geom_col() +
transition_states(year,
transition_length = 2,
state_length = 1) +
labs(title = "Year: {closest_state}") +
theme_minimal() +
theme(legend.position = "none")

transition_reveal()

transition_reveal() dibuja progresivamente los datos a lo largo de un eje, manteniendo visibles los datos ya revelados. Funciona mejor con geom_line() y geom_point().
library(dplyr)
library(ggplot2)
library(gganimate)
library(gapminder)
df <- gapminder %>%
filter(country %in% c("United States", "China",
"India", "Germany", "Brazil"))
ggplot(df, aes(x = year, y = lifeExp,
color = country, group = country)) +
geom_line(linewidth = 1) +
geom_point(size = 2) +
transition_reveal(year) +
labs(x = "Year", y = "Life expectancy") +
theme_minimal()
shadow_mark()
shadow_mark() deja marcas permanentes de todos los fotogramas anteriores. Combinado con transition_time() permite ver la trayectoria completa de los datos a medida que avanza la animación.
alpha y size controlan el aspecto de las marcas.
library(ggplot2)
library(gganimate)
library(gapminder)
ggplot(gapminder, aes(x = gdpPercap, y = lifeExp,
size = pop, color = continent)) +
geom_point(alpha = 0.7) +
scale_x_log10() +
scale_size(range = c(2, 12), guide = "none") +
transition_time(year) +
labs(title = "Year: {round(frame_time)}") +
shadow_mark(alpha = 0.1, size = 0.5)

ease_aes()
ease_aes() controla cómo se interpolan los valores entre fotogramas. El valor por defecto es "linear", pero puedes usar las opciones que se muestran a continuación para cambiar el movimiento de la animación.

"linear" (por defecto)
library(ggplot2)
library(gganimate)
library(gapminder)
ggplot(gapminder, aes(x = gdpPercap, y = lifeExp,
size = pop, color = continent)) +
geom_point(alpha = 0.7) +
scale_x_log10() +
scale_size(range = c(2, 12), guide = "none") +
transition_time(year) +
ease_aes("linear")

"cubic-in-out"
Empieza despacio, acelera en el centro y decelera al final. Otras opciones habituales son "bounce-out", "elastic-in-out" y "back-in-out".
library(ggplot2)
library(gganimate)
library(gapminder)
ggplot(gapminder, aes(x = gdpPercap, y = lifeExp,
size = pop, color = continent)) +
geom_point(alpha = 0.7) +
scale_x_log10() +
scale_size(range = c(2, 12), guide = "none") +
transition_time(year) +
ease_aes("cubic-in-out")
animate() y anim_save()
Usa animate() para controlar los parámetros de salida. nframes establece el número total de fotogramas, fps los fotogramas por segundo y width/height las dimensiones en píxeles.
Llama a anim_save() después de animate() para guardar la última animación renderizada como archivo GIF.
library(ggplot2)
library(gganimate)
library(gapminder)
p <- ggplot(gapminder, aes(x = gdpPercap, y = lifeExp,
size = pop, color = continent)) +
geom_point(alpha = 0.7) +
scale_x_log10() +
scale_size(range = c(2, 12), guide = "none") +
transition_time(year) +
labs(title = "Year: {round(frame_time)}")
animate(p,
nframes = 100, # Total de fotogramas
fps = 10, # Fotogramas por segundo
width = 600, # Ancho en píxeles
height = 400) # Alto en píxeles
anim_save("gapminder.gif")

Aprende estadística desde lo básico hasta técnicas avanzadas, explicado con claridad
Ir al sitio
También te puede interesar