GGPlot Légende: Titre, Position et Textes



GGPlot Légende: Titre, Position et Textes

Ce tutoriel R graphique montre comment personnaliser une légende de ggplot.

vous apprendrez à:

  • Modifier le titre de la légende et les libellés des textes
  • Modifier la position de la légende. Dans les options par défaut de ggplot2, la légende est placée à droite du graphique. Nous montrerons des exemples pour déplacer la légende vers le bas ou vers le haut du graphique. Vous apprendrez aussi comment mettre la légende à l’intérieur du graphique.
  • Inverser l’ordre des légendes. Le moyen le plus simple d’inverser l’ordre des éléments de légende est d’utiliser la fonction ggplot2 guides(). Il change l’ordre de légende pour l’esthétique spécifiée (fill, color, linetype, shape, size, etc). Exemple de code R : p + guides(fill = guide_legend(fill = guide_legend(reverse = TRUE)) pour la couleur de remplissage (ex. : box plot et bar plot) ou p + guides(color = guide_legend(reverse = TRUE)) pour la couleur des points et des lignes (ex. : scatter plot et line plot).
  • Supprimer une légende ggplot
    • Supprimer le titre de la légende: p + theme(legend.title = element_blank()).
    • Masquer la légende entière pour créer un ggplot sans légende. Exemple de code R: p + theme(legend.position = "none").
    • Masquer la légende pour une géométrie spécifique, par exemple geom_text(). Il suffit de spécifier l’argument show.legend = FALSE dans la géométrie donnée. Exemple: geom_text(show.legend = FALSE).
  • Changer le thème de la légende
    • Modifier l’apparence de la police (size, color / colour et face) du titre et des textes de la légende.
    • Modifier la couleur d’arrière-plan de la légende, la taille et la largeur des signes.
  • Renommer les étiquettes de légendes et changer l’ordre des éléments d’une légende donnée.
  • Contrôler manuellement les couleurs de la légende en spécifiant des valeurs de couleurs personnalisées.
  • Modifier les légendes ggplot pour chaque esthétique quand vous avez beaucoup de légendes. Fonction R : guides()
    • Modifier l’ordre des légendes dans le cas où vous avez plusieurs légendes (ou plusieurs guides) générées en utilisant plusieurs esthétiques (shape, color, size, fill, etc.) dans le graphique. Par exemple, vous pouvez avoir une légende pour la forme des points et une autre pour la couleur et la taille des points.
    • Supprimer la légende pour une esthétique spécifique, disons la légende pour shape.

Contents:

Related Book

GGPlot2 Essentials for Great Data Visualization in R

Fonctions clés de ggplot2

Commencez par créer un box plot en utilisant l’ensemble de données ToothGrowth. Changer la couleur de remplissage du box plot en fonction de la variable de groupement dose.

library(ggplot2)
ToothGrowth$dose <- as.factor(ToothGrowth$dose)
p <- ggplot(ToothGrowth, aes(x = dose, y = len))+ 
  geom_boxplot(aes(fill = dose)) # Changer la couleur de remplissage par groupe

Fonctions clés R pour changer les légendes de ggplot:

  • p + labs(). Modifier le titre de la légende.
    • Utiliser p + labs(fill = “dose”) pour geom_boxplot(aes(fill = dose))
    • Utiliser p + labs(color = “dose”) pour geom_boxplot(aes(color = dose))
    • et ainsi de suite pour le type de ligne, la forme, etc
  • p + theme(…). Changer le thème de la légende : couleur de fond, bordure de la boîte de légende, taille et couleur de la police de caractères.
  • p + scale_x_discrete(limites = c(“2”, “0.5”, “1”))). Modifier l’ordre des éléments dans la légende.
  • p + scale_fill_discrete(nom = “Dose”, étiquettes = c(“A”, “B”, “C”)). Renommer le titre de la légende et les libellés des textes.
  • guides(). Modifier l’ordre des légendes et supprimer la légende d’une esthétique spécifique, lorsque vous avez plusieurs légendes.

Options essentielles du thème ggplot2 pour la légende:

theme(
    # Libellé du titre et du texte de la légende
    #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    # Taille, couleur et apparence du titre
    legend.title = element_text(color, size, face),
    # Alignement des titres. Nombre de 0 (gauche) à 1 (droite)
    legend.title.align = NULL,             
    # Taille de la couleur de la police et de l'apparence du texte
    legend.text = element_text(color, size, face), 
    # Alignement des textes. Nombre de 0 (gauche) à 1 (droite)
    legend.text.align = NULL,
    
    # Position, marge et arrière-plan de la légende
    #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    # Position de la légende : right, left, bottom, top, none
    legend.position = "right", 
    # Marge autour de chaque légende
    legend.margin = margin(0.2, 0.2, 0.2, 0.2, "cm"),
    # Background de la légende
    legend.background = element_rect(fill, color, size, linetype),
    
    # Orientation et justification de la légende
    #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    # Disposition des éléments dans les légendes ("horizontal" ou "vertical")
    legend.direction = NULL, 
    # Positionnement de la légende à l'intérieur ou à l'extérieur du graphique 
    # ("center" ou vecteur numérique à deux éléments) 
    legend.justification = "center", 
    
    # Fond des signes de la légende
    #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    legend.key = element_rect(fill, color),  # Background des signes
    legend.key.size = unit(1.2, "lines"),    # taille des signes (unité)
    legend.key.height = NULL,                # hauteur des signes (unité)
    legend.key.width = NULL,                 # largeur des signes (unité)
    
    # Espacement entre les légendes. 
    #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    legend.spacing = unit(0.4, "cm"), 
    legend.spacing.x = NULL,                 # Espacement horizontal
    legend.spacing.y = NULL,                 # Espacement vertical
    
    # Boîte de la légende
    #:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    # Disposition de plusieurs légendes ("horizontal" ou "vertical")
    legend.box = NULL, 
    # Marges autour de l'ensemble de la zone de légende
    legend.box.margin = margin(0, 0, 0, 0, "cm"), 
    # Fond de la zone de légende : element_rect()
    legend.box.background = element_blank(), 
    # L'espacement entre la zone graphique et la zone de légende
    legend.box.spacing = unit(0.4, "cm")
)

Pour effacer le titre de la légende, utilisez element_blank() pour l’option de thème correspondante. Par exemple, utilisez ceci: p + theme(legend.title = element_blank()).

Modifier le titre de la légende

La fonction labs() peut être utilisée pour mettre à jour facilement le titre de la légende pour une esthétique donnée (fill, color, size, shape, linetype, …):

# Graphique par défaut
print(p)

# Modifier les titres des légendes
p + labs(fill = "Dose (mg)")

Modifier la position de la légende

Les valeurs allouées pour la position de la légende sont : “left”,“top”, “right”, “bottom”, “none”.

La localisation de la légende peut aussi être un vecteur numérique c(x,y), où x et y sont les coordonnées de la légende. Leurs valeurs doivent être comprises entre 0 et 1. c(0,0) correspond à la position “en bas à gauche” et c(1,1) correspond à la position “en haut à droite”. Cela permet de placer la légende à l’intérieur du graphique.

# Mettre légende en haut de la page
p + theme(legend.position="top")

# Définir la position de la légende par un vecteur numérique c(x, y)
# Placez la légende à l'intérieur du graphique
p + theme(legend.position = c(0.7, 0.2),
          legend.direction = "horizontal")

Inverser l’ordre des éléments de la légende

Pour changer l’ordre des éléments de la légende dans notre exemple, où les box plots sont remplies par groupes, vous pouvez utiliser les fonctions guides() ou scale_fill_discrete() comme suit:

# Utilisez la fonction guides pour inverser la légende pour 
# une esthétique spécifique (fill, linetype, shape or color)
p + guides(fill = guide_legend(reverse=TRUE))

# Ou utilisez scale_fill_discrete (comme ci-dessus)
p + scale_fill_discrete(guide = guide_legend(reverse=TRUE))

# Ou modifier directement l'échelle (comme ci-dessus)
p + scale_fill_discrete(breaks = rev(levels(ToothGrowth$dose)))

Supprimer la légende

Vous pouvez supprimer la légende comme suit:

p + theme(legend.position = "none")

Modifier la taille, la couleur et l’apparence de la légende

Le code R suivant change la taille de la légende et la couleur du texte:

# Modifier l'apparence du titre de la légende et des étiquettes de texte
p + theme(legend.title = element_text(color = "blue", size = 10),
          legend.text = element_text(color = "red"))

Modifier la couleur de fond de la légende, la taille et la largeur des signes de la légende

p + theme(
  # Modifier la couleur de fond de la légende
  legend.background = element_rect(fill = "darkgray"),
  legend.key = element_rect(fill = "lightblue", color = NA),
  # Modifier la taille et la largeur des signes de la légende
  legend.key.size = unit(1.5, "cm"),
  legend.key.width = unit(0.5,"cm") 
  )

Pour ajouter une bordure à la zone de légende, vous pouvez spécifier les arguments suivants dans la fonction element_rect():

  • linetype dont les valeurs incluent l’une des valeurs suivantes : “solid”, “dashed”, ..
  • color et size, pour changer la couleur et la taille de la ligne de bordure de la boîte, respectivement

Par exemple:

p + theme(
  legend.background = element_rect(color = "steelblue", linetype = "solid")
  )

Renommer les étiquettes des légendes et modifier l’ordre des éléments

Ceci peut être fait avec la fonction scale:

  • Modifier l’ordre des éléments de légende: scale_x_discrete()
  • Modifier le titre de la légende et les textes: scale_fill_discrete()
# Modifier l'ordre des éléments de légende
p + scale_x_discrete(limits=c("2", "0.5", "1"))

# Modifier le titre et les étiquettes des légendes
p + scale_fill_discrete(name = "Dose", labels = c("A", "B", "C"))

D’autres fonctions scale_xxx discrètes incluent:

# Couleur des lignes et des points
scale_color_discrete(name, labels, limits, breaks)
# Pour les types de lignes
scale_linetype_discrete(name, labels, limits, breaks)
# Pour les formes de points
scale_shape_discrete(name, labels, limits, breaks)
# Pour la taille de point
scale_size_discrete(name, labels, limits, breaks)
# Opacité/transparence
scale_alpha_discrete(name, labels, limits, breaks)

Modifier manuellement les couleurs de la légende

Les fonctions ci-dessous permettent de modifier manuellement la couleur de la légende:

  • scale_color_manual() ou scale_colour_manual() : Modifier la couleur des points et des lignes.
  • scale_fill_manual() : Modifier la couleur de remplissage des zones (pour les bar plots et box plots)
p + scale_fill_manual(values = c("#d8b365", "#f5f5f5", "#5ab4ac"))

Guides multiples : Supprimer et ordonner des légendes

Il est possible d’utiliser la fonction guides() pour définir ou supprimer la légende d’une esthétique particulière (fill, color, size, shape, etc).

  1. Données: mtcars. Convertir les variables cyl et gear en facteur:
mtcars$cyl<-as.factor(mtcars$cyl)
mtcars$gear <- as.factor(mtcars$gear)
  1. Créer un nuage de points à l’esthétique multiple (guides). La couleur et la forme des points sont déterminées respectivement par les variables de groupes cyl et gear. La taille des points est contrôlée par la variable qsec.
p <- ggplot(data = mtcars, aes(x = mpg, y = wt))+
    geom_point(aes(color = cyl, size = qsec, shape = gear))
p

  1. Modifier la position de la légende pour plusieurs guides:
p + theme(legend.position = "bottom",
          legend.box = "vertical")

  1. Modifier l’ordre de la légende à l’aide de la fonction guide_legend():
p + guides(color = guide_legend(order = 1),
         size = guide_legend(order = 2),
         shape = guide_legend(order = 3))

Notez que, dans le cas d’une couleur continue, la fonction guide_colourbar() doit être utilisée pour changer la position de la légende des couleurs.

ggplot(data = mpg, aes(x = displ, y = cty))+
  geom_point(aes(size = hwy, color = cyl, shape = drv))+
  guides(colour = guide_colourbar(order = 1),
         alpha = guide_legend(order = 2),
         size = guide_legend(order = 3))

  1. Supprimer une légende pour une esthétique particulière (couleur et taille):
p + guides(color = FALSE, size = FALSE)

La suppression d’une légende particulière peut également être effectuée en utilisant les fonctions scale_xx(). Dans ce cas, l’argument guide est utilisé comme suit.

# Désactiver la légende de la forme des points
p + scale_shape(guide=FALSE)
# Désactiver la légende de la taille
p + scale_size(guide=FALSE)
# Désactiver la légende des couleurs
p + scale_color_manual(values=c('#999999','#E69F00','#56B4E9'),
                       guide=FALSE)

Conclusion

Nous vous présentons comment changer facilement le titre, la position et les textes d’une légende ggplot. Les différentes étapes sont résumées comme suit.

  • Créer un exemple de ggplot:
library(ggplot2)
p <- ggplot(ToothGrowth, aes(x = factor(dose), y = len)) + 
  geom_boxplot()
  • Changer le titre d’une légende pour une esthétique donnée (fill, color, size, shape, linetype, …):
p + labs(fill = "Dose (mg)")
  • Supprimer la légende:
p + theme(legend.position = "none")
  • Modifier la position de la légende. Valeurs possibles : “left”,“top”, “right”, “bottom”, “none”.
p + theme(legend.position = "top")



Version: English





No Comments

Give a comment

Want to post an issue with R? If yes, please make sure you have read this: How to Include Reproducible R Script Examples in Datanovia Comments