Comment réaliser un spaghetti plot avec R ?

Les spaghetti plots, ou plots en fagot, ou encore line plots sont des outils de visualisation qui permettent de suivre des trajectoires individuelles, au cours du temps, ou au travers de différentes conditions. En voici un exemple : 

Table des matières

Difficultés liées aux formats long et wide des données

Il n’est pas toujours facile de les réaliser avec ggplot2 car les données n’ont pas toujours le bon format.

Lorsque des mesures sont réalisées à différents temps, les données sont souvent sous une forme “wide”, c’est-à-dire avec autant de colonnes que de temps de mesures. Comme ceci,  par exemple :

format wide

Or, pour réaliser un spaghetti plot avec ggplot2, les données doivent être sous un format long, c’est-à-dire avec les mesures réalisées aux différents temps, positionnées les une sous les autres. Autrement dit avec :

  • une colonne “Day” qui contient les temps de 0 à 9
  • une colonne “Reaction” qui contient les valeurs mesurées, comme ceci :
format long

Remarques : Ces données sont celles du jeu de données “sleepstudy”, elles sont inclues dans le package lme4.

Ces données concernent une étude sur la privation de sommeil. Dix-huit sujets sont suivis au cours du temps. Leur temps de réaction moyen par jour (en millisecondes) est mesuré.

Réaliser un spaghetti plot à partir de données au format long

Lorsque les données sont au format long, il est relativement facile de réaliser un spaghetti plot avec ggplot2.

Pour cela, il est nécessaire :

  • d’employer une couche geom_line()
  • de préciser, comment les lignes doivent être tracées (ici par Sujet) en ajoutant aes(group=Subject)
ggplot(sleep_long, aes(y=Reaction, x=Days))+
    geom_point()+
    geom_line(aes(group=Subject)) 

On peut ensuite utiliser une couleur différente par Sujet afin de mieux visualiser les trajectoires (en ajoutant colour=Subject dans la fonction aes de la couche ggplot())

ggplot(sleep_long, aes(y=Reaction, x=Days, colour=Subject))+
    geom_point()+
    geom_line(aes(group=Subject))+
    scale_x_continuous(breaks=0:9) 

Réaliser un spaghetti plot à partir de données au format wide

Dans cette situation, il existe deux solutions :

  1. passer les données en format long
  2. utiliser la fonction ggparcoord() du package GGally :

Pour cela, nous pouvons employer la fonction pivot_longer() du package tidyr.

Les principaux arguments de la fonction pivot_longer() sont :

  • cols : qui permet de spécifier les colonnes à pivoter. Avec le signe -, nous retirons la variable Subject
  • names_to: qui permet de donner un nom à la colonne qui contiendra les noms des variables pivotées (ici Day)
  • values_to: qui permet de donner un nom à la colonne qui contiendra les noms des valeurs pivotées (ici Reaction)
  • names_prefix: qui permet de supprimer le prefix “Day” lors du remplissage de la colonne Day:

.

sleep_long <- sleep_wide %>% 
    pivot_longer(cols=-Subject,
                 names_to="Day",
                 values_to="Reaction",
                 names_prefix="Day") 

Et donc ensuite, nous pouvons employer ggplot2 pour réaliser le spaghetti plot, avec le code vu précédemment.

Utiliser la fonction ggparcoord() du package GGally

Cette fonction permet de réaliser des spaghetti plots, avec des données au format wide. Les arguments sont :

  • columns qui permet d’indiquer les indices des variables qui contiennent les données à représenter
  • groupColumn: permet d’indiquer l’indice de la variable qui permet de relier les points entre eux (ici la variable Subject qui est en position 1)
  • showPoints, permet d’indiquer si on souhaite faire apparaître les points
  • scale, qui permet de réaliser plusieurs standradisation des données. Cela n’a pas de sens ici ; ’option “globalminmax” permet de ne pas standardiser les données
library(GGally)

ggparcoord(sleep_wide,
    columns = 2:ncol(sleep_wide), 
    groupColumn = 1,
    showPoints=TRUE,
    scale="globalminmax",
    )  

Cela peut être intéressant de standardiser des données lorsqu’il s’agit de variables différentes (voir ci dessous)

Vous trouverez plus d’informations sur la page d’aide de la fonction ggparcoord.

Variante : Spaghetti plots avec des variables à la place du temps

ggparcoord(iris,
    columns = 1:4, 
    showPoints=TRUE,
    groupColumn = 5,
    scale="globalminmax",
    )  
spaghetti plot avec des variables

Idem avec standardisation

ggparcoord(iris,
    columns = 1:4, 
    showPoints=TRUE,
    groupColumn = 5,
    scale="std",
    )  

Avec des boxplots :

 

spaghetti plot avec boxplot

Pour aller plus loin

Vous trouverez d’autres exemples de spaghetti plots réalisés avec la fonction ggparcoord, en cliquant ici.

Si cet article vous a plus, ou vous a été utile, et si vous le souhaitez, vous pouvez soutenir ce blog en faisant un don sur sa page Tipeee 

Poursuivez votre lecture

Laisser un commentaire

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

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.