Fecha de la ultima revisión
#if(!require(devtools)) install.packages("devtools")
#devtools::install_github("dgrtwo/gganimate")
#devtools::install_github("yihui/animation")
#install.packages("rgl", dependencies=TRUE)
library(tidyverse)
library(gganimate)
library(rgl)
library(gapminder)
library(ggplot2)
library(animation)
library(gt)
library(datasets)
library(png)
library(gifski)
#install.packages("rgl", dependencies = TRUE)
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. Para facilitar el trabajo, reducimos el archivo a un subgrupo de años (1952 a 1962).
#gt(head(gapminder))
head(gapminder, n=20)
unique(gapminder$year)
gapminder2=gapminder %>% filter(year <1980)
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(
gapminder2,
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
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.
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.
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.
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
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.8, alpha = FALSE)
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 basica shadow_mark() es igual a shadow_mark(past = TRUE, future = FALSE)
final_animation = p + transition_time(year) +
labs(title = "Year: {frame_time}") +
shadow_mark(past=TRUE)
final_animation
Located at https://ourworldindata.org/covid-deaths
library(readr)
library(readr)
owid_covid_data <- read_csv("COVID_DATA/owid-covid-data_2022.csv")
owid_covid_data
names(owid_covid_data)
library(tidyverse)
owid_covid_data2= owid_covid_data %>%
select(date, location, total_deaths,
total_cases_per_million, continent,
total_deaths_per_million, population) %>% # Seleccionar aquí sus variables del data frame
drop_na() # remover los "NA". Esto remueve toda la fila si una de las variables tiene un "NA"
head(owid_covid_data2) # Visualizar su nuevo data frame
unique(owid_covid_data2$continent)
Con la función transition_reveal los datos aparece gradualmente en el gráfico
Usamos otro conjunto de datos del archivo airquality que se encuentra en el paquete datasets Primero creamos un gráfico estático (sin animación), el día del mes (day), la temperatura del día (Temp) y una linea para cada mes (mayo a septiembre) con la función group.
head(airquality)
p <- ggplot(airquality,
aes(Day, Temp, group = Month, color = factor(Month))) +
geom_line() +
labs(x = "Day of Month", y = "Temperature") +
theme(legend.position = "top")
p
Ahora animamos el gráfico en el eje de x con la variable de Day, añadiendo transition_reveal(Day)
Se puede añadir un punto al principio de las lineas
La transiciones también pueden ser producida con otros geoms por ejemplo con geom_col. El primer paso es tener un data frame que representa los valores de cada columna/barra. Entonces el primer paso aquí fue de calcular el promedio de temperatura por mes en un nuevo data frame que llamamos temp.promedio.
Preparación de los datos
head(airquality)
temp.promedio <- airquality %>%
select(Month, Temp) %>%
group_by(Month) %>%
summarise(Temp2 = mean(Temp, na.rm = TRUE))
temp.promedio
Ahora creamos un gráfico estático de los datos con geom_col.
p <- ggplot(temp.promedio, aes(Month, Temp2, fill=Month)) +
geom_col() +
scale_fill_distiller(palette = "Blues", direction = 1) +
theme_minimal() +
theme(
panel.grid = element_blank(),
panel.grid.major.y = element_line(color = "white"),
panel.ontop = TRUE
)
p
El efecto de transición de un mes al otro se añade con la función transition_states(). Si uno añade solamente esta función aparece solamente una barra a la vez.
Para más ejemplos de como usar gganimate ver este enlace.