Chapitre 15 Animer ses graphiques ggplot avec gganimate

Le package gganimate permet d’enrichir ggplot avec des fonctionnalités d’animation.

15.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 ces 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é.

anim <- 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 {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.

anim_facet <- 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 {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

15.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)
        )

15.3 Exporter une animation

La fonction anime_save() permet de sauvegarder nos animations sous différent format à définir via le moteur de rendu. Par défaut, elle sauvegarde la dernière animation.

anim_save("figures/ma_super_animation.gif")

15.4 Exercice 6

Produire le nuage de points du croisement de la part communale des logements ayant une étiquette A,B,C en fonction de la part communale du parc récent. Créer une animation par département uniquement pour ceux de la région Centre-Val de Loire.

Le résultat attendu :