Chapitre 14 Animer ses graphiques ggplot avec gganimate
Le package gganimate permet d’enrichir ggplot avec des fonctionnalités d’animation.
14.1 Produire une animation
Nous allons voir comment animer notre premier graphique sur la répartition des pays en fonction du taux de mortalité et du PIB, en regardant comment celui ci évolue avec les années.
Pour cela, nous partons des même données mais définies pour l’ensemble des années depuis 1990.
ggplot(data = ODD_graphique_anime) +
geom_point(aes(x = log(Gross_Domestic_Product_GDP),
y = log(Maternal_mortality_ratio),
color = Continent)) +
labs(title = "Mortalité maternelle en fonction du PIB par habitant",
subtitle = "En 2015",
x = "PIB",
y = "Taux de mortalité de la mère \n(pour 100 000 naissances)",
caption = "Source : ODD / ONU\n échelle logarithmique")
Le graphique précédent est bien sûr illisible, un même pays voit ses données affichées pour toutes les années.
Nous allons utiliser la fonction transition_states() du package gganimate
pour lui définir l’année comme la frame de notre graphique animé.
<- ggplot(data = ODD_graphique_anime) +
anim geom_point(aes(x = log(Gross_Domestic_Product_GDP),
y = log(Maternal_mortality_ratio),
color = Continent)) +
labs(title = "Mortalité maternelle en fonction du PIB par habitant",
subtitle = "En {closest_state}",
x = "PIB",
y = "Taux de mortalité de la mère \n(pour 100 000 naissances)",
caption = "Source : ODD / ONU\n échelle logarithmique") +
transition_states(states = Year,
transition_length = 1,
state_length = 2)
anim
Transition_states() peut s’assimiler à la création de facettes, mais qui vont être ensuite utilisées pour créer une animation. Les options permettant de paramétrer cette animation:
- states: le nom de la colonne qui va définir nos états
- transition_length : la durée relative de la transition
- state_length : la durée relative de la pause entre les transitions
- wrap : booléen qui défini si l’animation tourne en boucle ou non.
La variable closest_state nous permet d’utiliser ici l’état pour l’afficher en sous-titre.
gganimate possède encore bien d’autres fonctionnalités pour définir son animation, notamment :
ease_aes() permet de définir comment le graphique change entre deux états : progression linaire, progression qui accélère entre le début et la fin…
enter_xx() et exit_xx() permette de définir comment les objets apparaissent et disparaissent quand on change d’état.
On peut utiliser gganimate avec des facettes.
<- ggplot(data = ODD_graphique_anime) +
anim_facet geom_point(aes(x = log(Gross_Domestic_Product_GDP),
y = log(Maternal_mortality_ratio),
color = Continent)) +
labs(title = "Mortalité maternelle en fonction du PIB par habitant",
subtitle = "En {closest_state}",
x = "PIB",
y = "Taux de mortalité de la mère \n(pour 100 000 naissances)",
caption = "Source : ODD / ONU\n échelle logarithmique") +
facet_wrap("Continent") +
transition_states(states = Year,
transition_length = 1,
state_length = 2)
anim_facet
14.2 Paramétrer l’animation
La fonction animate()
permet de paramétrer notre animation. Notamment:
- le moteur de rendu
- le nombre de frames à créer
- le frame rate
- la durée
Ici par exemple, nous paramétrons le rendu pour supprimer la boucle d’animation (loop=FALSE)
animate(anim, renderer = gifski_renderer(file = tempfile(fileext = ".gif"),
loop = FALSE,
width = NULL,
height = NULL)
)