C'est de la data et mon expeRtise afin d'en tirer le maximum

Mise en forme des graphiques ggplot2

 

Lorsqu’on commence à employer le package ggplot2 pour visualiser des données, on a rapidement besoin de réaliser quelques mises en forme, comme par exemple modifier les couleurs, ajouter un titre, ajouter du texte, gérer la légende, assembler plusieurs graphiques, ou encore de les exporter. Dans cet article, je vous propose d’explorer ces éléments.

 

1. Mise en forme par la modification des couleurs

1.1 Couleurs des points et des lignes

La gestion des couleurs se fait en deux étapes :

  1. Définition de la variable sur laquelle les couleurs vont être appliquées. Cela se réalise dans la couche canevas (la première), à l’intérieur de la fonction `aes()`, en employant l’argument `colour`.
  2. Définition des couleurs elle mêmes, à l’aide de la fonction `scale_colour_manual()`
Dans l’exemple ci-dessous, une couleur est appliquée en fonction de la variable Species :  
library(ggplot2)
ggplot(iris,aes(x=Sepal.Width, y=Sepal.Length, colour=Species))+
geom_point()
scatterplot couleur par défaut   Pour modifier les couleurs par défaut, on utilisera la couche scale_colour_manual()
ggplot(iris,aes(x=Sepal.Width, y=Sepal.Length, colour=Species))+
geom_point()+
scale_colour_manual(values=c("orange", "blue", "green3"))
définition manuelle des couleurs    

Vous pouvez préciser les couleurs en utilisant le code hexadécimal fournit par l’addin colour picker. Pour plus d’informations, consultez mon article : “Choisissez et modifiez très facilement les couleurs de vos graphs R avec Colour Picker“.

Si vous souhaitez appliquer une couleur en fonction d’une variable numérique, vous pouvez employer un gradient de couleurs, à l’aide de la couche, `scale_coulour_gradient2()`:

library(scales)
ggplot(iris,aes(x=Sepal.Width, y=Sepal.Length, colour=Petal.Length))+
geom_point()+
scale_colour_gradient2(low = muted("red"),
                       mid = "white",
                       high = muted("blue"), 
                       midpoint =4.35 )
gradient de couleurs Remarque : pour utiliser la fonction muted(), il est nécessaire de charger le package scales.

1.2 Des barres, des boites, des aires

Il s’agit du même principe, sauf que l’on emploiera l’argument `fill` dans la couche canevas, à la place de l’argument `colour`, et ensuite les fonctions `scale_fill_manual()` et `scale_fill_gradient2()`, à la place des fonctions `scale_colour_manual()` et `scale_colour_gradient2()`

 
ggplot(iris, aes(y=Sepal.Length, x=Species, fill=Species))+
geom_jitter()+
geom_boxplot(alpha=0.5)
boxplot avec les couleurs par défaut    
ggplot(iris, aes(y=Sepal.Length, x=Species, fill=Species))+
geom_jitter()+
geom_boxplot(alpha=0.5)+
scale_fill_manual(values=c("orange", "blue", "green3"))
  modification des couleurs des boites   Pour plus d’informations sur la gestion des couleurs des graphiques réalisés avec ggplot2, vous pouvez consulter mon article : “Comment modifier les couleurs avec ggplot2 ?“.

 2. Mise en forme du titre

Nous pouvons facilement ajouter un titre, et un sous-titre en employant la fonction `ggtitle()`.

ggplot(iris,aes(x=Sepal.Width, y=Sepal.Length, colour=Species))+
geom_point()+
scale_colour_manual(values=c("orange", "blue", "green3"))+
ggtitle("Longueur des Sépales en fonction de la largeur", subtitle="Par espèce")
Titre_par_défaut  

La modification de l’alignement, de la taille et de la couleur du titre et du sous-titre se réalise dans une couche `theme()`:

ggplot(iris,aes(x=Sepal.Width, y=Sepal.Length, colour=Species))+
  geom_point()+
  scale_colour_manual(values=c("orange", "blue", "green3"))+
  ggtitle("Longueur des Sépales en fonction de la largeur", subtitle="Par espèce")+
  theme(plot.title = element_text(hjust = 0.5, 
                                  size=12,
                                  color="blue",
                                  face="bold"),
        plot.subtitle = element_text(hjust = 0.5,
                                     size=10,
                                     color="green3",
                                     face="italic"))
  modification de la couleur du titre  

Pour mettre une partie du texte à la ligne, il suffit d’introduire un `\n` dans la chaîne de caractères :

ggplot(iris,aes(x=Sepal.Width, y=Sepal.Length, colour=Species))+
    geom_point()+
    ggtitle("Longueur des Sépales \n en fonction de la largeur, \n par espèce")+
    theme(plot.title = element_text(hjust = 0.5))
  Mise à la ligne du titre

 

3. Mise en forme des axes

3.1 Etiquettes

Les étiquettes des axes peuvent être définies à l’aide des couches `ylab` et `xlab` :

ggplot(iris,aes(x=Sepal.Width, y=Sepal.Length, colour=Species))+
    geom_point()+
    ylab("Longueur des sépales (cm)")+
    xlab("Largeur des sépales (cm)")
 

3.2 Quadrillage

La taille du quadrillage peut être géré avec les couches `scale_x_continuous()` et `scale_y_continuous()` et l’argument `breaks`:

 
ggplot(iris,aes(x=Sepal.Width, y=Sepal.Length, colour=Species))+
    geom_point()+
    scale_x_continuous(breaks=seq(2,6,by=0.25))+
    scale_y_continuous(breaks=seq(4,8,by=0.25))
gestion de la taille du quadrillage  

Les étiquettes du quadrillage peuvent également être modifiées à l’aide de l’argument `labels` des fonctions `scale_y_continuous` et `scale_x_continuous`. Par exemple, ci-dessous, pour exprimer la longueur des sépales en mm plutôt qu’en cm.

ggplot(iris,aes(x=Sepal.Width, y=Sepal.Length, colour=Species))+
    geom_point()+
    scale_y_continuous(breaks=seq(4,8,by=0.25), labels=seq(40,80,by=2.5))+
    ylab("Longueur des Sépales en mm")
  gestion des axes  

Certaines fois, pour plus de visibilité, nous pouvons avoir besoin d’appliquer une rotation des étiquettes sur l’axe des x. Cela peut se gérer au niveau de la couche `theme()` et de l’élément `axis.text.x`:

ggplot(iris,aes(x=Sepal.Width, y=Sepal.Length, colour=Species))+
    geom_point()+
    scale_x_continuous(breaks=seq(2,6,by=0.25))+
    theme(axis.text.x=element_text(angle=30, hjust=1, vjust=1))
  Rotation des étiquettes de l'axe des x  

Pour augmenter rapidement la taille de l’étiquette des axes et du quadrillage (très utile pour l’exportation des plots), vous pouvez employer la fonction `element_text(size=rel(2))`, comme ceci, par exemple :

 
ggplot(iris,aes(x=Sepal.Width, y=Sepal.Length, colour=Species))+
    geom_point()+
    scale_x_continuous(breaks=seq(2,6,by=0.25))+
    theme (axis.title= element_text(size=rel(2)),
           axis.text.x = element_text(size=rel(1.5)),
           axis.text.y = element_text(size=rel(1.5)))
 

 

 4. Mise en forme de la légende

4.1 Affichage

L‘affichage de la légende peut être géré dans les couches successives, ou de façon plus globale. Dans le graphique ci-dessous, on peut voir, représenté dans la légende, une boite de boxplot et un point. Cela signifie que les deux couches sont concernées.

ggplot(iris,aes(x=Species, y=Sepal.Length, colour=Species))+
    geom_jitter(width=0.25, height=0)+
    geom_boxplot(alpha=0.25)
  affichage de la légende par défaut   Nous allons pouvoir supprimer l’affichage de la légende à partir de la couche geom_jitter(), en utilisant l’argument show.legend=FALSE:
ggplot(iris,aes(x=Species, y=Sepal.Length, colour=Species))+
    geom_jitter(width=0.25, height=0, show.legend=FALSE)+
    geom_boxplot(alpha=0.25)
  Idem avec la couche geom_boxplot().
ggplot(iris,aes(x=Species, y=Sepal.Length, colour=Species))+
    geom_jitter(width=0.25, height=0, show.legend=FALSE)+
    geom_boxplot(alpha=0.25,show.legend=FALSE)
  Nous aurions pu obtenir le même résultat en utilisant la couche theme(legend.position="none") :
ggplot(iris,aes(x=Species, y=Sepal.Length, colour=Species))+
    geom_jitter(width=0.25, height=0)+
    geom_boxplot(alpha=0.25) +
    theme(legend.position="none")

4.2 Position

Pour changer la position de la légende, nous pouvons employer les options left, right, bottom, top.
ggplot(iris,aes(x=Species, y=Sepal.Length, colour=Species))+
    geom_jitter(width=0.25, height=0)+
    geom_boxplot(alpha=0.25) +
    theme(legend.position="bottom")
  modification de la position de la légende  

4.3 Titre de la légende

Le titre de la légende peut être modifié en utilisant la fonction labs(). L’argument à employer (color ou fill), dépend de ce qui est employé dans la première couche. Dans l’exemple ci-dessous, on utilisera color :
ggplot(iris,aes(x=Sepal.Width, y=Sepal.Length, colour=Species))+
    geom_point()+
    labs(color="Espèce")
Modification du titre de la légende     Et dans ce second exemple, on utilisera fill:
ggplot(iris,aes(x=Sepal.Width, fill=Species))+
    geom_density()+
    labs(fill="Espèce")
  Titre de la légende

5. Assembler plusieurs graphiques

Il existe plusieurs solutions pour assembler plusieurs graphiques. Une fonction simple à employer, est la fonction `grid.arrange()` du package `gridExtra`:

g1 <- ggplot(iris,aes(x=Sepal.Width, y=Sepal.Length, colour=Species))+
    geom_point()+
    labs(color="Espèce")

g2 <- ggplot(iris,aes(x=Sepal.Width, fill=Species))+
    geom_density()+
    labs(fill="Espèce")

library(gridExtra)
grid.arrange(g1,g2, ncol=2)
  Couplage de plusieurs graphiques   Pour des assemblages plus sophistiqués, vous pouvez employer la fonction plot_grid du package cowplot, ou encore le package patchwork:
library(cowplot)
plot_grid(g1, g2, nrow=2, labels=c('A', 'B'),rel_heights = c(2, 4))
Assemblage de plusieurs graphiques    
library(patchwork)
 
g1 + g2 +
    plot_layout(nrow=2, height=c(2,1))
Couplage de plusieurs graphiques

6. Ajouter du texte

Pour ajouter une étiquette sur un point (par exemple un numéro d’identification), nous pouvons employer la fonction `geom_text()`, en définissant la variable concernée dans la fonction `aes()`. Par exemple, si je créé, dans le jeu de données `iris`, une variable `id` avec le numéro de la ligne, je peux ensuite le faire figurer sur le graphique, comme ceci :

library(tidyverse)
iris <- iris %>% 
    mutate(id=1:nrow(iris))

ggplot(iris,aes(x=Sepal.Width, y=Sepal.Length, colour=Species))+
    geom_point()+
    geom_text(aes(label=id),size=3,check_overlap = TRUE, vjust=-1)
  Utilisation de la couche geom_text Pour ajouter du texte sur le graphique, nous pouvons employer la fonction annotate(). Par exemple, si je délimite le graphique en 2 zones :  
ggplot(iris,aes(x=Sepal.Width, y=Sepal.Length, colour=Species))+
    geom_point()+
    geom_vline(xintercept=3, col="magenta", size=2)+
    annotate("text", x=2.5,y=4,label= "ZONE1", color="magenta")+
    annotate("text", x=4,y=4,label= "ZONE2", color="magenta")
  Ajout de texte sur un graphique

7. Exportations

Une solution simple pour exporter un graphique, consiste à employer la fonction `ggsave()` du package `ggplot2`. Cette fonction permet alors de spécifier où le graphique doit être exporté, sous quel nom, quelle taille et avec quelle résolution(dpi).

Dans l’exemple ci dessous, je stock un graphique dans l’objet g3, puis je crée un dossier plot dans mon projet R, et enfin,  j’exporte le graphique g3, dans le dossier plot, sous le nom “mon_super_plot.jpg”, avec une dimension de 10 cm sur 10 cm et une résolution de 300 dpi.
# stockage du plot dans l'objet g3
g3 <- ggplot(iris,aes(x=Sepal.Width, y=Sepal.Length, colour=Species))+
    geom_point()+
    geom_vline(xintercept=3, col="magenta", size=2)+
    annotate("text", x=2.5,y=4,label= "ZONE1", color="magenta")+
    annotate("text", x=4,y=4,label= "ZONE2", color="magenta")

# creation du dossier plots
dir.create("plots")

# Exportation
ggsave(here::here("plots","mon_super_plot.jpg"), 
       g3, 
       width = 10, 
       height = 10, 
       units = "cm",
       dpi=300)
   

Pour aller plus loin

  • Pour obtenir plus d’informations sur le package `cowplot`, vous pouvez consulter cette page.
  • Pour obtenir plus d’informations sur le package `patchwork`: vous pouvez consulter sa vignette.
  • Pour obtenir plus d’informations sur l’utilisation du package ggplot2, vous pouvez consulter le cookbook de Winston Chang.
  J’espère que ce court post répondra à vos principaux besoins de mise en forme des graphiques. C’est à vous d’essayer, à présent ! Si cet article vous a plu ou vous a été utile, n’oubliez pas de le partager ! Vous pouvez également soutenir le blog par un don libre sur la page Tipee. soutenez le blog Image par Clker-Free-Vector-Images de Pixabay  

Poursuivez votre lecture

4 réponses

  1. Bonjour Madame Vedova,

    Merci pour cet autre article très détaillé.
    J’ai énormément apprécié.

    Vivement un autre article.
    Excellente journée à vous.

  2. Bonjour Claire,
    Je vous remercie énormément pour cet article si bien élaboré. Vous fournissez un travail très honorable. J’attends avec joie le prochain article. Excellente journée.

Laisser un commentaire

Votre adresse de messagerie 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.