Comment modifier l’ordre d’affichage dans un plot ?

modifier l'ordre dans les graphs ggplot2

Récemment, j’ai vu passer une question sur un forum dédié à R, qui m’a paru intéressante : une personne demandait comment réarranger un graphique réalisé avec ggplot2.

question ordre ggplot2

Cette question m’a inspiré cet article. Je vais donc vous montrer, en pas à pas, comment réarranger un graphique ggplot2, en modifiant l’ordre des modalités du facteur concerné.

 

Pour illustrer cet article, je vais employer le jeu de données carsafety contenu dans le package UsingR. Si vous voulez reproduire les exemples ci-dessous, il vous sera nécessaire d’installer au préalable, ce package UsingR, puis de le charger avec la commande library(UsingR):

 

Le jeu de données carsafety concerne les statistiques de sécurité parues en janvier 2004 dans le New Yorker, montrant les taux de mortalité par million de véhicules, à la fois pour les conducteurs d’une voiture et les conducteurs d’autres voitures touchées.

Le jeu de données carsafety contient 4 variables :

  • Make.model : qui correspond au modèle du véhicule. Il s’agit d’une variable catégorielle, considérée par R comme un facteur, et qui contient 33 niveaux (ou modalités)
  • type : qui correspond au type du véhicule. Il s’agit d’une variable catégorielle, considérée par R comme un facteur, et qui contient 7 niveaux (ou modalités) : “SUV” , “compact”, “large”, “midsize”, “minivan”, ou “pickup”.
  •  Driver.deaths: qui correspond au nombre de conducteurs décédés. Il s’agit d’une variable numérique.
  • Other.deaths: qui correspond au nombre de conducteurs, d’autres voitures, décédés. Il s’agit également d’une variable numérique.

 

1. Modifier l’ordre d’un plot : partie théorique

Lorsque vous réalisez un plot avec ggplot2 et que l’une des variables est catégorielle, c’est-à-dire considérée par R, comme un facteur, l’ordre d’affichage est celui des modalités (ou niveaux de cette variable).

Pour connaître ces niveaux vous pouvez employer la fonction levels(). Par exemple, pour la variable type :

 

Remarque : lorsque vous importez un jeu de données avec une fonction read.csv2()  ou autre, les levels par défaut sont ceux de l’ordre alphabétique. Ce n’est pas le cas, ici, ; les levels ont sans doute été modifiés lors de la création du jeu de données et de son inclusion dans le package UsingR.

 

Si je réalise un barplot, pour représenter le nombre de données par type de véhicule, l’ordre des barres, va donc être : SUV, compact, large, midsize, minivan, pcikup, subcompact :

 

barplot avec ggplot2

Pour changer l’ordre des barres, il faut changer l’ordre des levels !

 

Et il existe plusieurs fonctions super pratiques pour le faire, dans le package forcats, qui appartient au super package tidyverse :

fonction pour modifier l'ordre des levels

 

Ce package forecats dispose d’une feuille d’aide cheatsheet (dont est issue l’image précédente), que vous pouvez télécharger sur le site de R studio : https://rstudio.com/resources/cheatsheets/

 

2. Modifier l’ordre d’un plot : tutoriel

2.1 Modifier l’ordre manuellement

La fonction la plus simple à employer est la fonction fct_relevel(), l’ordre souhaité des modalités est alors spécifié manuellement. Par exemple pour réordonner les types de véhicule par ordre alphabétique :

 

Si nous refaisons le graphique précédent :

 

changer l'ordre manuellement

2.2 Modifier l’ordre en fonction du nombre croissant de données

Pour cela, nous employons la fonction fct_infreq, comme ceci :

 

 

par ordre croissant

2.3 Modifier l’ordre en fonction du nombre décroissant de données

Pour cela, nous allons employer, en amont, la fonction fct_rev(), c’est-à-dire : fct_rev(fct_infreq(type)

A ce stade, je précise que le changement d’ordre des modalités peut se faire directement au moment du plot. Vous n’êtes pas obligé de les modifier avant de faire le graphique :

 

par ordre décroissant

2.4 Modifier l’ordre en fonction de l’ordre d’apparition

Une autre possibilité est de présenter les données par ordre d’apparition dans le jeu de données. Par exemple, si je regarde la variable type, je vois que l’ordre d’apparition des types de véhicule est : large, minivan, midsize, subcompact, compact, SUV et pickup:

 

 

En employant la fonction fct_inorder(type), je retrouve bien cet ordre :

 

par ordre d'apparition

2.5 Modifier l’ordre en fonction d’un paramètre statistique

Par exemple, si je fais un boxplot du nombre de conducteurs décédés, en fonction du type de véhicule, j’obtiens le graphique suivant :

 

boxplot ggplot2

Pour améliorer la visualisation, je peux souhaiter ordonner les types de véhicules en fonction de la valeur de la médiane. Cela se réalise très facilement, à l’aide de la fonction fct_reorder(), en indiquant en argument :

  • la variable catégorielle concernée, ici type
  • la variable réponse concernée, ici Driver.deaths
  • le paramètre statistique, à l’aide de .fun=, ici “median”

Au final, on emploiera fct_reorder(type,Driver.deaths,.fun="median"), comme ceci :

 

ordre médiane croissante

 

Et on peut évidemment renverser cet ordre, en employant en amont la fonction fct_rev(), comme ci-dessous :

 

ordre médianes décroissantes

 

 

Vous pouvez aussi employer les fonctions fct_relevel, fct_infreq, fct_inorder, fct_rev etc… en dehors des graphiques ggplot2, par exemple, pour modifier l’ordre d’affichage d’une table descriptive

 

 

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

👉 Cliquez ici pour soutenir le blog Statistiques et Logiciel R

 

Poursuivez votre lecture :

Partager l'article
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

9 commentaires

  1. vincentp Répondre

    Article très intéressant, comme toujours.

    Pour ma part je ré-ordonne en amont de la création graphique via les fonctions de base with() et reorder(). Exemple ci-dessous si l’on souhaite classer par ordre croissant une variable suivant les valeurs prises par celle-ci, sur un data.frame en format long.

    dat$variable <- with(dat, reorder(variable, value))

    Cependant, il est toujours bon de connaître d’autre façons de procéder afin d’avoir plusieurs cordes à son arc. Merci pour l’article.

    • Claire Della Vedova Auteur de l’articleRépondre

      Bonjour Vincent,

      merci pour le partage.
      Bien à vous.

  2. Abdou Salam Répondre

    Bonjour Claire
    Merci pour le partage. Sauf que moi je n’arrive pas à trouver la fonction “fct_infreq”. Elle est introuvable.

    • Claire Della Vedova Auteur de l’articleRépondre

      Bonjour,
      la fonction fct_infreq appartient au package forcats, il faut l’installer au préalable, en utilisation l’outils d’installation de R Studio ou bien en utilisant la commande install.packages(“forcats”).
      Bonne continuation.

  3. Mohamed Répondre

    C’est super
    Quand est t-il a` propos du polygone statistique?

    Si on a un nuage statistique, comment agrandir la taille d’écriture dans le titre et dans les axes, comment ajouter les dates sur l’axe des abscisses

    Merci Mme Claire Della Vedova pour ce tutoriel

    • Claire Della Vedova Auteur de l’articleRépondre

      Bonjour Mohamed,

      vous trouverez toutes les infos sur la modification des tailles des textes dans cet ouvrage , en consultation libre : https://r-graphics.org/
      Bonne continuation.

  4. Eric P Répondre

    Bon article mais je n’arrive pas à télécharger le jeu des données : library(UsingR)
    data(carsafety)

    • Claire Della Vedova Auteur de l’articleRépondre

      Bonjour Eric, il faut, au préalable, installer la library(UsingR).
      Vous pouvez utiliser l’outil d’installation de R Studio, ou bien utiliser la commande : install.packages(“UsingR”)
      Bonne continuation.

Laisser un commentaire

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