Créer des graphiques chronologiques ou timelines avec R : techniques et astuces

Table des matières

Quel package pour réaliser des timeline ?

Une solution simple et efficace pour réaliser des timelines avec R consiste à employer le package vistime, et sa fonctiongg_vistime().

Cette fonction s’applique sur un data frame qui doit comporter au minimum 3 variables :

  • une variable date de départ
  • une variable date de fin
  • une variable évènement

D’autres variables peuvent ensuite être employées pour gérer la couleur des périodes, la couleur des textes, etc…

De plus, comme son nom l’indique (parce qu’elle commence par gg), la fonction gg_vistime() est ggplot2 compatible. Cela veut dire, que dans un second temps, nous pourrons employer des couches ggplot2 pour modifier les couleurs, employer un thème et même modifier l’étiquette des dates représenter sur l’axe des x.

Un exemple simple de timeline

Création des data pour la timeline

Nous allons créer un jeu de données afin de représenter chronologiquement 5 étapes de développement d’un projet. Pour cela, nous avons besoin :

  • d’une variable (colonne) qui contient les différentes étapes du projet (stage) ; chaque étape correpondant à une ligne
  • d’une variable (colonne) qui contient la date de départ de chaque étape (start_date)
  • d’une variable (colonne) qui contient la date de fin de chaque étape (end_date)
 
library(lubridate)
# Création des données
stages <- c("Conception", "Développement", "Tests", "Déploiement", "Maintenance")
start_dates <- ymd(c("2023-01-01", "2023-06-01", "2024-01-01", "2024-07-01", "2025-01-01"))
end_dates <- ymd(c("2023-05-31", "2023-12-31", "2024-06-30", "2024-12-31", "2025-12-31"))
# Créer le DataFrame
mydata1 <- data.frame( stages, start_dates, end_dates) 

Voici  le data frame créé : 

# Afficher le DataFrame
mydata1

         stages start_dates  end_dates
1    Conception  2023-01-01 2023-05-31
2 Développement  2023-06-01 2023-12-31
3         Tests  2024-01-01 2024-06-30
4   Déploiement  2024-07-01 2024-12-31
5   Maintenance  2025-01-01 2025-12-31 

Création de la timeline

La timeline se crée facilement avec la fonction gg_vistime(). Cette fonction dispose de 12 arguments qui permettent de gérer l’apparence de la timeline. Les plus importants sont :

  • col.event
  • col.start
  • col.end
library(vistime)
gg_vistime(mydata1,
col.event = "stages",
col.start = "start_dates",
col.end = "end_dates") 
timeline de base

Vous trouverez un descriptif des 12 arguments de la fonction, dans la vignette du du package : https://cran.r-project.org/web/packages/vistime/vignettes/vistime-vignette.html

Quelques amélioration de la timeline :

Modification des couleurs des boites de la timeline

Pour modifier la couleur des boites, il s’agit d’ajouter, dans le dataframe, une variable contenant les couleurs désirées. Cette variable est ensuite spécifiée dans l’argument col.color de la fonction gg_vistime()

library(dplyr)
mydata1 <- mydata1 %>%
mutate(colors = c("#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd"))
mydata1

         stages start_dates  end_dates  colors
1    Conception  2023-01-01 2023-05-31 #1f77b4
2 Développement  2023-06-01 2023-12-31 #ff7f0e
3         Tests  2024-01-01 2024-06-30 #2ca02c
4   Déploiement  2024-07-01 2024-12-31 #d62728
5   Maintenance  2025-01-01 2025-12-31 #9467b 
gg_vistime(mydata1,
  col.event = "stages",
  col.start = "start_dates",
  col.end = "end_dates",
  title = "Timeline du Projet", # ajout d'un titre
  col.color = "colors") 

Modification de la couleur de la police employée dans la timeline

C’est le même principe pour la couleur de la police, avec cette fois l’argument col.fontcolor :

mydata1$col_text <- c("orange", "white", "magenta","black" ,"navyblue")

gg_vistime(mydata1,
  col.event = "stages",
  col.start = "start_dates",
  col.end = "end_dates",
  title = "Timeline du Projet",
  col.color = "colors",
  col.fontcolor = "col_text") 
Modifier la couleur des textes

Modification du thème de la timeline

Comme je le disais précédemment, la fonction gg_vistime() est compatible avec ggplot2.

Pour appliquer un thème spécifique, il suffit d’utiliser une couche theme()

Ici j’ai choisi le thème theme_blackboard() du package see et le theme theme_solarized() package ggthemes:

library(see)
gg_vistime(mydata1,
  col.event = "stages",
  col.start = "start_dates",
  col.end = "end_dates",
  title = "Timeline du Projet",
  col.color = "colors",
  col.fontcolor = "col_text")+
  theme_blackboard() # du package see 
Modification du thème de la timeline
library(ggthemes)

gg_vistime(mydata1,
  col.event = "stages",
  col.start = "start_dates",
  col.end = "end_dates",
  title = "Timeline du Projet",
  col.color = "colors",
  col.fontcolor = "col_text")+
  theme_solarized() 
Autre modification du thème

Représenter plusieurs timelines

Pour représenter les timelines de plusieurs objets, il est nécessaire de disposer d’un data frame global, avec une variable catégorielle dont les modalités correspondent aux différents objets. Voici un exemple :

# Deuxième tableau de données

stages <- c("Conception", "Développement", "Tests", "Déploiement", "Maintenance")
start_dates <- ymd(c("2023-08-01", "2024-10-01", "2025-02-01", "2025-08-01", "2026-01-01"))
end_dates <- ymd(c("2024-09-30", "2025-01-31", "2025-07-31", "2025-12-31", "2027-08-31"))
colors <- c("#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd")

# Créer le DataFrame pour le second projet
mydata2 <- data.frame( stages, start_dates, end_dates, colors)
mydata <-bind_rows(mydata1, mydata2)
# ajout du projet
mydata$projet <- rep(c("Projet1","Projet2"),each=5)


# Afficher le DataFrame
mydata
        stages start_dates  end_dates  colors col_text  projet
1     Conception  2023-01-01 2023-05-31 #1f77b4   orange Projet1
2  Développement  2023-06-01 2023-12-31 #ff7f0e    white Projet1
3          Tests  2024-01-01 2024-06-30 #2ca02c  magenta Projet1
4    Déploiement  2024-07-01 2024-12-31 #d62728    black Projet1
5    Maintenance  2025-01-01 2025-12-31 #9467bd navyblue Projet1
6     Conception  2023-08-01 2024-09-30 #1f77b4     <NA> Projet2
7  Développement  2024-10-01 2025-01-31 #ff7f0e     <NA> Projet2
8          Tests  2025-02-01 2025-07-31 #2ca02c     <NA> Projet2
9    Déploiement  2025-08-01 2025-12-31 #d62728     <NA> Projet2
10   Maintenance  2026-01-01 2027-08-31 #9467bd     <NA> Projet2

# Time line 
gg_vistime(mydata,
  col.event = "stages",
  col.start = "start_dates",
  col.end = "end_dates",
  col.color = "colors",
  col.group = "projet") 
Afficher plusieurs timelines

Faire apparaitre les dates de changements et choisir leur format

Cela a été un véritable défi pour moi ! J’ai rencontré plusieurs obstacles en raison de problèmes avec le format des données, sans pour autant saisir l’origine exacte de ces difficultés. Cependant, après de multiples tentatives, j’ai finalement trouvé une solution qui fonctionne, même si je ne la saisis pas entièrement…

Dans un premier temps, si on regarde le graph obtenu par défaut, on peut voir que celui-ci affiche une étiquette de date par année, et que seule l’année, avec 4 chiffres, est présente :

gg_vistime(mydata1,
  col.event = "stages",
  col.start = "start_dates",
  col.end = "end_dates",
  col.color = "colors") 

Pour pouvoir afficher une date à chaque changement d’évènement, il est nécessaire que la variable contienne aussi des éléments d’heure.

Je ne sais pas pourquoi, mais ça fonctionne !

Pour cela, je colle la chaine de caractère “00-00-00” (ça correspond minuit – c’est à dire 00 heure, 00 minutes et 00 secondes). Puis je passe le tout en format POSIXCt avec la fonction ymd_hms() du lubridate. J’ai bien essayé d’avoir une variable initiale en format POSIXCt, mais ça ne fonctionne pas.

Ensuite, il suffit d’employer la couche scale_x_datetime() de ggplot2:

library(ggplot2)
gg_vistime(mydata1,
  col.event = "stages",
  col.start = "start_dates",
  col.end = "end_dates",
  col.color = "colors")+
  scale_x_datetime(breaks=ymd_hms(paste(mydata1$end_dates, "00-00-00"))) 

Dans un second temps, nous pouvons spécifier le format de l’étiquette de la date, afin qu’il corresponde à nos besoins. Par exemple, si je veux afficher le jour en chiffre puis le mois abrégé en lettre, et l’année avec 2 chiffres, j’emploie date_labels = "%d-%b %y.

Mais, attention, pour utiliser cet argument, il est nécessaire, au préalable, d’installer le package scales :

library(scales)
gg_vistime(mydata1,
  col.event = "stages",
  col.start = "start_dates",
  col.end = "end_dates",
  col.color = "colors")+
  scale_x_datetime(breaks=ymd_hms(paste(mydata1$end_dates, "00-00-00")),
                         date_labels = "%d-%b %y")+
           theme(axis.text.x=element_text(angle=30, hjust=0.8)) 

Si on regarde avec attention, on peut voir qu’il manque la première date. On peut alors l’ajouter dans l’argument breaks avec ce code breaks=c(ymd_hms(paste(min(mydata1$start_dates), "00-00-00")), ymd_hms(paste(mydata1$end_dates, "00-00-00")))

Ça consiste à créer un vecteur avec toutes les dates à afficher.

Pour cela, j’ajoute la première date avec min(mydata1$start_dates) et je lui colle aussi l’heure de minuit avec la fonction paste(), et je passe le tout en POSIXCt avec la fonction ymd_hms() :

gg_vistime(mydata1,
  col.event = "stages",
  col.start = "start_dates",
  col.end = "end_dates",
  col.color = "colors",
  col.group = "projet")+
  scale_x_datetime(breaks=c(
                            ymd_hms(paste(min(mydata1$start_dates), "00-00-00")),
                            ymd_hms(paste(mydata1$end_dates, "00-00-00"))),
                         date_labels = "%d-%b %y")+
           theme(axis.text.x=element_text(angle=30, hjust=0.8)) 

Voici un résumé des formats d’affichage des dates et d’heures :

Format des dates

D’après le R gGraphics Cookbook : https://r-graphics.org/recipe-axes-axis-date

Conclusion

En résumé, les timelines sont des outils de visualisation très intéressants, qui permettent de représenter des séquences temporelles d’événements de manière claire et cohérente.

Comme nous l’avons vu, il est relativement facile de réaliser des timeline sous R, grâce au package vistime et sa fonction gg_vistime(). De plus, de par sa compatibilité avec ggplot2, cette fonction permet de créer des chronologies personnalisées, adaptées à une grande variété de besoins.

L’objectif de cet article était de vous fournir les connaissances et techniques nécessaires pour construire vos propres graphiques de timeline avec R.

J’espère qu’il vous permettra non seulement de gagner du temps dans votre travail, mais aussi de transmettre des informations complexes de façon plus accessible et engageante.

Si cet article vous a été utile, ou si vous avez des questions, des suggestions, ou des exemples de vos propres timelines que vous aimeriez partager, n’hésitez pas à laisser un commentaire ci-dessous. Votre feedback est non seulement apprécié, mais il contribue également à enrichir la discussion et l’apprentissage de toute notre communauté.

Vous souhaitez vous former à R, ou aux statistiques ?

Retrouver le planning et les programmes de  mes formations ici  👇👇👇 

Vous avez besoin d'un assitance pour analyser vos données ?

Retrouver mes propositions de services ici  👇👇👇 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous souhaitez soutenir mon travail ?​

C’est possible en faisant un don  sur la page Tipeee du blog  👇👇👇

Poursuivez votre lecture

Bonjour !

vous venez souvent ?

Identifiez-vous pour avoir accès à toutes les fontionnalités !

Aide mémoire off'R ;)

Enregistrez vous pour recevoir gratuitement mes fiches “aide mémoire” (ou cheat sheets) qui vous permettront de réaliser facilement les principales analyses biostatistiques avec le logiciel R et pour être informés des mises à jour du site.