Fecha de la ultima revisión

## [1] "2023-08-22"
#if(!require(devtools)) install.packages("devtools")
#devtools::install_github("dgrtwo/gganimate")
#devtools::install_github("yihui/animation")
library(tidyverse)
library(gganimate)
library(rgl)
library(gapminder)
library(ggplot2)
library(animation)
library(gt)

El paquete gganimate extiende el paquete de ggplot2 y implementa unas funciones para animar gráficos que típicamente estuviese estática. El paquete fue desarrollado por Pedersen y Robinson (2017).Siempre puede ir al siguiente enlace para tener más información y otros ejemplos. https://gganimate.com/articles/gganimate.html. Note que antes de utilizar este modulo se asume que se conozca la estructura de la creación de gráficos con ggplot2.

Los datos provienen del paquete gapminder y el archivo gapminder. Estos datos representa la expectativa de supervivencia en diferentes 142 países entre 1952 y 2007. Aquí observamos las primeras 6 filas del archivo.

gt(head(gapminder))
country continent year lifeExp pop gdpPercap
Afghanistan Asia 1952 28.801 8425333 779.4453
Afghanistan Asia 1957 30.332 9240934 820.8530
Afghanistan Asia 1962 31.997 10267083 853.1007
Afghanistan Asia 1967 34.020 11537966 836.1971
Afghanistan Asia 1972 36.088 13079460 739.9811
Afghanistan Asia 1977 38.438 14880372 786.1134

Primero creamos un gráfico de puntos sin animación o sea estático. En el eje de X representa el GDP per capita en cada país, y en el eje de Y la supervivencia. El tamaño del punto es relativo el tamaño del país. La escala en el eje de X fue cambiado a una logarítmica usando scale_x_log10(). Aunque es difícil percibir la diferencia cada país tiene su proprio color.

p <- ggplot(
  gapminder, 
  aes(x = gdpPercap, y=lifeExp, size = pop, colour = country)) +
  geom_point(show.legend = FALSE, alpha = 0.8) +
  scale_size(range = c(2, 12)) +
  scale_x_log10() +
  labs(x = "GDP per capita", y = "Expectativa de Vida")
p

Gráficos con animación:

Para incluir las transiciones en tiempo se usa la función transition_time. El largo de transición sera corresponde as la diferencia entre la variable de tiempo (en este casa “Time”).

La variable frame_time añade arriba una leyenda del tiempo de transición. Note que se usa la función labs y se añade el titulo y lo que hay entre los corchetes es la variable del cambio en tiempo.

GDP_time=p + transition_time(year) +
  labs(title = "Año: {frame_time}")
GDP_time

animate(GDP_time, height = 600, width =600)

#anim_save("GDP_time.gif")

Crear facet animados.

Igual que para los gráficos de ggplot2 se puede crear una gráica por cada variable discreta. Para crear un gráfico por grupo y observar el de patrones de cambio en tiempo por continente se añade facet_wrap. En este próximo gráfico se produce un por cada continente.

p + facet_wrap(~continent) +
  transition_time(year) +
  labs(title = "Año: {frame_time}")

Animación de los ejes: ejes variables

En este caso lo que observamos es que la leyenda en en x varia con los años, y la de y la dejamos fija. Si se usa view_follow(fixed_x = TRUE), la leyenda en y variaría con el cambio en GDP per capita y la de x seria fija. Si queremos que los dos ejes varían con los datos se usa view_follow(), sin poner nada dentro de los paréntesis.

p + transition_time(year) +
  labs(title = "Año: {frame_time}") +
  view_follow(fixed_y = TRUE)

Observar transiciones entre valores

La función shadow_wake es para representar un efecto de sobre o dirreccón por donde ocurre los cambios. Se puede seleccionar el tamaño de la disminución y la opacidad de la sombra. El largo de la cola no es

Julián check this translation?

La duración de la estela no se da en cuadros absolutos, ya que eso haría que la animación sea susceptible a cambios en la velocidad de fotogramas. En cambio, se da por proporción de la longitud total de la animación. Por consecuencia el wake_length varia entre 0 a 1 en relación con el total de numero de periodo de tiempo (frames). En otra palabra más cerca el valor se acerca a 1, más largo sera la cola.

The length of the wake is not given in absolute frames as that would make the animation susceptible to changes in the framerate. Instead it is given as a proportion of the total length of the animation.

p + transition_time(year) +
  labs(title = "Year: {frame_time}") +
  shadow_wake(wake_length = 0.2, alpha = FALSE)

Visualizar los datos originales en el fondo

Con la función shadow_mark se puede ver los datos originales. Tanto los datos anteriores y futuros se pueden demostrar con diferentes estilos. Por ejemplo con el siguiente script shadow_mark(past = FALSE, future = TRUE) se observaría los datos futuros y no del pasado. El alternativa básica shadow_mark() es igual a shadow_mark(past = TRUE, future = FALSE)

p + transition_time(year) +
  labs(title = "Year: {frame_time}") +
  shadow_mark(alpha = 0.3, size = 0.5)