Animation avec gganimate
gganimate étend la syntaxe des graphiques implémentée par ggplot2 pour y inclure la description de l'animation. Pour ce faire, il fournit une série de nouvelles fonctions qui peuvent être ajoutées à l'objet "plot" afin de personnaliser la façon dont il doit évoluer dans le temps.
- transition_*() : définit la façon dont les données doivent être réparties et comment elles se rapportent à elles-mêmes dans le temps.
- view_*() : définit comment les échelles de position doivent changer au cours de l'animation.
- shadow_*() : définit comment les données d'autres points dans le temps doivent être présentées au point donné dans le temps.
- enter_*() / exit_*() : définit comment les nouvelles données doivent apparaître et comment les anciennes données doivent disparaître au cours de l'animation. ease_aes() définit comment les différents aspects esthétiques doivent être atténués pendant les transitions.
En combinant ces nouvelles fonctions, on arrive à donner une dimension supplémentaire à notre graphique. Une feuille récapitulative permet de comprendre comment s'utilise la bibliothèque.
Données
library(dplyr)
library(ggplot2)
theme_set(theme_minimal())
data = read.csv('data/continents.csv', stringsAsFactors = TRUE)
head(data)
summary(data)
## Country Year Population
## Afrique :72 Min. :1950 Min. :2.275e+08
## Amérique:72 1st Qu.:1968 1st Qu.:5.863e+08
## Asie :72 Median :1986 Median :7.302e+08
## Europe :72 Mean :1986 Mean :1.246e+09
## 3rd Qu.:2003 3rd Qu.:1.383e+09
## Max. :2021 Max. :4.695e+09
Barplot
Animons ce graphique :
data %>%
filter(Year == 2021) %>%
ggplot(aes(x = Country, weight = Population)) +
geom_bar(fill = "#00a67d")
Pour cela, nous avons besoins des bibliothèques gganimate, ggforce et gifski. Une fois installées, redémarrez R.
Evolution
Pour animer, ajoutons une fonction de transition sur l'année à notre objet ggplot.
library(gganimate)
library(ggforce)
a = data %>%
ggplot(aes(x = Country, weight = Population)) +
geom_bar(fill = "#00a67d") +
transition_time(Year)
animate(a, nframes = length(unique(data$Year)))
anim_save(filename = "bar_evolution.gif")
Ajoutons d'autres éléments à notre gif, tel que :
- Un label
- Un titre évolutif
# Ajoutons un label à nos données
data = data %>%
mutate(Label = paste(as.character(round(Population/1000000)), "M"))
# Préparation du graphique ggplot
a = data %>%
ggplot(aes(x = Country, weight = Population)) +
geom_bar(fill = "#00a67d") +
labs(title = 'Population Mondiale {frame_time}') + # Permet au titre d'être dynamique
scale_y_continuous(labels = function(x) paste(x/1000000000, "Md"), limits = c(0, 4800000000)) +
geom_text(aes(label=Label, y=Population), size = 5, vjust = -.8) + # Ajout du label sur les barres
transition_time(Year)
# Contrôlons quelques paramètres de rendu supplémentaires
animate(a, nframes = length(unique(data$Year)), fps = 12, width = 1280, height = 720, end_pause = 12)
anim_save(filename = "bar_evolution.gif")
Courbe
transition_reveal
btc_data = read.csv('data/bitcoins.csv', sep = ';') %>%
mutate(jour = as.Date(jour))
STEP = length(btc_data[,1])
format_dollars = function(x){
return(paste(" ", format(x, big.mark = ','), "$"))
}
a = btc_data %>%
ggplot(aes(x = jour, y = prix)) +
geom_line(color = "steelblue", linewidth = 1) +
geom_point(color = "steelblue", size = 2) +
scale_y_continuous(labels = format_dollars) +
transition_reveal(jour) +
view_follow()
animate(a, nframes = round(60+STEP/6), fps = 24, width = 1280, height = 720, end_pause = 60)
anim_save(filename = "line_evolution.gif")
Animation avec gganimate
gganimate étend la syntaxe des graphiques implémentée par ggplot2 pour y inclure la description de l'animation. Pour ce faire, il fournit une série de nouvelles fonctions qui peuvent être ajoutées à l'objet "plot" afin de personnaliser la façon dont il doit évoluer dans le temps.
- transition_*() : définit la façon dont les données doivent être réparties et comment elles se rapportent à elles-mêmes dans le temps.
- view_*() : définit comment les échelles de position doivent changer au cours de l'animation.
- shadow_*() : définit comment les données d'autres points dans le temps doivent être présentées au point donné dans le temps.
- enter_*() / exit_*() : définit comment les nouvelles données doivent apparaître et comment les anciennes données doivent disparaître au cours de l'animation. ease_aes() définit comment les différents aspects esthétiques doivent être atténués pendant les transitions.
En combinant ces nouvelles fonctions, on arrive à donner une dimension supplémentaire à notre graphique. Une feuille récapitulative permet de comprendre comment s'utilise la bibliothèque.
Données
library(dplyr)
library(ggplot2)
theme_set(theme_minimal())
data = read.csv('data/continents.csv', stringsAsFactors = TRUE)
head(data)
summary(data)
## Country Year Population
## Afrique :72 Min. :1950 Min. :2.275e+08
## Amérique:72 1st Qu.:1968 1st Qu.:5.863e+08
## Asie :72 Median :1986 Median :7.302e+08
## Europe :72 Mean :1986 Mean :1.246e+09
## 3rd Qu.:2003 3rd Qu.:1.383e+09
## Max. :2021 Max. :4.695e+09
Barplot
Animons ce graphique :
data %>%
filter(Year == 2021) %>%
ggplot(aes(x = Country, weight = Population)) +
geom_bar(fill = "#00a67d")
Pour cela, nous avons besoins des bibliothèques gganimate, ggforce et gifski. Une fois installées, redémarrez R.
Evolution
Pour animer, ajoutons une fonction de transition sur l'année à notre objet ggplot.
library(gganimate)
library(ggforce)
a = data %>%
ggplot(aes(x = Country, weight = Population)) +
geom_bar(fill = "#00a67d") +
transition_time(Year)
animate(a, nframes = length(unique(data$Year)))
anim_save(filename = "bar_evolution.gif")
Ajoutons d'autres éléments à notre gif, tel que :
- Un label
- Un titre évolutif
# Ajoutons un label à nos données
data = data %>%
mutate(Label = paste(as.character(round(Population/1000000)), "M"))
# Préparation du graphique ggplot
a = data %>%
ggplot(aes(x = Country, weight = Population)) +
geom_bar(fill = "#00a67d") +
labs(title = 'Population Mondiale {frame_time}') + # Permet au titre d'être dynamique
scale_y_continuous(labels = function(x) paste(x/1000000000, "Md"), limits = c(0, 4800000000)) +
geom_text(aes(label=Label, y=Population), size = 5, vjust = -.8) + # Ajout du label sur les barres
transition_time(Year)
# Contrôlons quelques paramètres de rendu supplémentaires
animate(a, nframes = length(unique(data$Year)), fps = 12, width = 1280, height = 720, end_pause = 12)
anim_save(filename = "bar_evolution.gif")
Courbe
transition_reveal
btc_data = read.csv('data/bitcoins.csv', sep = ';') %>%
mutate(jour = as.Date(jour))
STEP = length(btc_data[,1])
format_dollars = function(x){
return(paste(" ", format(x, big.mark = ','), "$"))
}
a = btc_data %>%
ggplot(aes(x = jour, y = prix)) +
geom_line(color = "steelblue", linewidth = 1) +
geom_point(color = "steelblue", size = 2) +
scale_y_continuous(labels = format_dollars) +
transition_reveal(jour) +
view_follow()
animate(a, nframes = round(60+STEP/6), fps = 24, width = 1280, height = 720, end_pause = 60)
anim_save(filename = "line_evolution.gif")