Diagramme de GANTT

Un diagramme de GANTT est un outil graphique idéal pour réaliser la gestion d'un projet, planifier le déroulement des étapes à l'avance.

Il est possible de réaliser un diagramme de GANTT avec le logiciel R grâce à différentes librairies comme plan ou DiagrammeR.

L'esssentiel de cette page !

La commande mermaid() de la librairie DiagrammeR réalise très facilement de supers diagrammes de GANTT.

Méthode 1 - GANTT avec la librairie DiagrammeR

1- Installer la librairie DiagrammeR nécessaire pour tracer des diagrammes de GANTT

install.packages("DiagrammeR")
library(DiagrammeR)

2- Tracer un diagramme de GANTT (exemple illustré ci-dessus)

Il suffit de modifier ce texte. On donne un titre aux sections, aux étapes. On précise si une étape commence à une date donnée, après une autre étape. On indique les durées ou les dates de fin.

crit : met en rouge les étapes critiques - done : les étapes déjà réalisées et active : celles à faire déjà ouvertes...

?mermaid pour en savoir plus.

mermaid("
gantt
dateFormat  YYYY-MM-DD
title Diagramme de GANTT d'un projet QSE

section Prise en main
Engagement de la direction           :crit,done,   p_en_main_1,    2018-09-01, 2018-09-08
Description de la ferme              :done,        p_en_main_2,    2018-09-08, 3w
Rédaction de la gestion documentaire :done,        gestion_doc,    2018-09-06, 10d
Rédaction des procédures             :active,      p_en_main_4,    after gestion_doc, 30d

section Analyses des problèmes et causes
Lister les problème                 :active,      pb_1,   2018-10-06,     24h
Identifier les causes               :active,      pb_2,   after pb_1,     1w
Sélectionner les causes             :active,      pb_3,   after pb_2,     1w
Construire les graphiques           :active,      pb_4,   after pb_3,     1w

section Mise en place des Solutions
Rédaction                           :active,      fin_1,     after pb_3,  3d
Application                         :active,      fin_2,     after fin_1, 1w
Rédaction du diaporama              :crit,        fin_3,     after fin_2, 48h
")


Méthode 2 - GANTT avec la librairie plan (plus difficile)


Une aide à la résolution de problèmes est disponible en bas de page.

Pour réaliser cet exemple de diagramme de GANTT, copier-coller les commandes ci-dessous dans la console R.

Diagramme de GANTT avec le logiciel R

1- Installer la librairie plannécessaire pour tracer des diagrammes de GANTT

install.packages("plan")
library(plan)

1- Méthode 1 - Réaliser deux listes : une pour les débuts de chaque étape, une autre pour les fins de chaque étape

# Etape 1 - réaliser deux listes : une pour les débuts de chaque étape, une pour les fins
débuts= as.POSIXct(c("2015-01-27","2015-01-28","2015-01-31","2015-02-03","2015-02-05","2015-02-12","2015-02-13"))
fins = as.POSIXct(c("2015-01-30","2015-02-03","2015-02-07","2015-02-05","2015-02-12","2015-02-13","2015-02-14"))

1'- Méthode 2 - Définir uniquement la date de début du projet puis créer ensuite 2 listes : avec les débuts relatifs et les durées de chaque étape

# Étape 1 - autre méthode : on peut aussi définir la début de chaque étape en général et la durée de chaque étape
départ = as.POSIXct("2015-01-27")
# on peut ainsi calculer les dates par rapport à une date de départ (ex : l'étape 2 commence 1 jour après le début, l'étape 3, 4 jours)
# ces durées en jours doivent être additionnées à la date de départ
débuts = c(0,1,4,7,9,16,17)  ; durée = c(3,6,7,2,7,1,1) # durée en jours ; fins = débuts+durée
fins = débuts+durée
fins=fins*86400+départ # (86400 permet de convertir les dates exprimées ici en jours en secondes (86400 secondes/jour))
débuts=débuts*86400+départ

2- Donner des noms aux différentes étapes ou actions

# Etape 2 - Désigner un nom pour chaque action (chaque étape)
étapes = c("Rédaction","Relecture","Illustration","Contrôle","Correction","Publication","Reliure")
# Etape 3 - Optionnels (autres informations)

3- (Optionnel) - Indiquer d'autres informations comme le pourcentage d'accomplissement de chaque étape ou les liens entre étapes

accomplissement = c(100,75,50,0,0,0,0) # Précise le pourcentage d'avancée de chaque étape (optionnel)
liens = c(NA,5,NA,NA,NA,NA,NA) # Précise si une étape doit nécessairement précéder une autre 
                                                       # (ex : l'étape 2 ici doit impérativement précéder l'étape 5)

4. Compilations de l'ensemble des informations dans un fichier type GANTT

mon_gantt <- as.gantt(
key=1:7, # numérotation des étapes
étapes,  # noms des étapes
débuts,  # dates de début
fins, # dates de fin
done=accomplissement, # optionnel - précise le degré d'accomplissement de chaque étape
neededBy = liens # optionnel - précise la dépendance de certaines étapes vis-à-vis d'autres
)
summary(mon_gantt ) # affiche un bilan du gantt nommé ici mon_gantt

5- (Optionnel) : définir des événements ponctuels type "réunions"

évenements_ponctuels <- c("Réunion 1", "Réunion 2") # événements ponctuels (leurs noms)
évenements_ponctuels_dates <- c("2015-02-03", "2015-02-10") # événements ponctuels (leurs dates)

6- Tracer le diagramme de GANTT (pour aller plus loin sur les formats de temps)

# EXEMPLE NON MIS EN FORME EN UTILISANT LA METHODE 1 (ETAPE 1 ci-dessus)
plot(mon_gantt)

##################
# EXEMPLE MIS EN FORME EN UTILISANT LA METHODE 2 (ETAPE 1 ci-dessus)
plot(mon_gantt,
xlim=c(départ, max(fins)),
col.notdone="orange", # couleur des barres, des étapes
        col.done = "black", # couleur des barres pour les parties déjà réalisées
grid.col = "red", # couleurs de la grille, du cadrillage
grid.lty = 3, # type de trait du cadrillage
time.lines.by="1 day", # densité du cadrillage (1 day, 2 days, 1 week, 2 weeks, 1 month, 2 months)
time.format = "%a%d-%m", # format du temps : ici nom de jour et date jour-mois - pour changer de format
time.labels.by="1 day", # indique une graduation par jour sur l'axe des abscisses
las=1, # orientation des étiquettes de l'axe des abscisses
event.label=évenements_ponctuels, # liste des événements ponctuels
event.time=évenements_ponctuels_dates, # dates des événements ponctuels
col.connector = "blue" # couleurs des événements ponctuels
)

Résolutions de problèmes

  • Si le message "Error in plot.new() : figure margins too large" s'affiche c'est que le texte (noms des étapes) est trop long. Il faut envisager de renommer les étapes ou d'exporter l'image directement (fonction png(width = 1024, height = 480) avant de tracer le graphique et dev.off() à la fin) sans l'afficher à l'écran.
    • Remarque : l'image est sauvegardée par défaut à l'adresse qui s'affiche avec getwd().
    • Remarque 2 : il faut indiquer une résolution suffisante dans png sinon l'erreur persiste.
  • Si la commande plot.gantt() n'est pas reconnu, la librairie plan n'a peut-être pas été installée !

Aller plus loin...

  • On ne peut modifier la taille de la police des événements ponctuels sauf si on charge la commande plot.ganttt (avec 3t, disponible ici en téléchargement) et qu'on remplace dans son script la fonction plot() par plot.ganttt(). Dans ce cas, le paramètre cex sera aussi pris en compte pour les événements ponctuels. (mots clefs : cex.event ou event.cex, paramètres qui n'existent pas)
  • Cette commande plot.ganttt permet aussi de changer les couleurs des barres pour avoir des couleurs de barres différentes.

Aller encore plus loin...

Plusieurs couleurs de barres pour un diagramme de GANTT réaliser avec R project alias R CRAN
Ce diagramme de gantt a été réalisé avec la librairie plan mais en remplaçant la commande plot.gantt par la fonction plot.ganttt (avec 3t).