Accéder au contenu principal

Facettes pour ggplot2 dans R

Dans ce tutoriel, vous apprendrez à tirer le meilleur parti des fonctions de facettes de ggplots.
Actualisé 16 janv. 2025  · 8 min de lecture

Introduction

Avec les facettes, vous pouvez créer des graphiques à plusieurs panneaux et contrôler la façon dont les échelles d'un panneau sont liées aux échelles d'un autre panneau.

Utilisation simple des facettes

Si vous êtes un tant soit peu familier avec ggplot2, vous connaissez la structure de base d'un appel à la fonction ggplot(). Pour une introduction à ggplot2, vous pouvez consulter notre cours sur ggplot2. Lorsque vous appelez ggplot, vous fournissez une source de données, généralement un cadre de données, puis vous demandez à ggplot de faire correspondre différentes variables de notre source de données à différents aspects esthétiques, comme la position des axes x ou y ou la couleur de nos points ou de nos barres. Avec les facettes, vous disposez d'un moyen supplémentaire de cartographier les variables. Pour le démontrer, vous utiliserez l'ensemble de données suivant, qui comprend un certain nombre d'indicateurs économiques pour une sélection de pays. La plupart d'entre elles sont des variantes du PIB, le produit intérieur brut de chaque pays.

 print(econdata)
##   Country  GDP_nom  GDP_PPP GDP_nom_per_capita GDP_PPP_per_capita
## 1     USA 19390600 19390600              59501              59495
## 2  Canada  1652412  1769270              45077              48141
## 3   China 12014610 23159107               8643              16807
## 4   Japan  4872135  5428813              38440              42659
## 5  France  2583560  2835746              39869              43550
## 6 Germany  3684816  4170790              44550              50206
## 7  Sweden  3684816   520937              53218              51264
## 8 Ireland   333994   343682              70638              72632
##   GNI_per_capita        Region
## 1          58270 North America
## 2          42870 North America
## 3           8690          Asia
## 4          38550          Asia
## 5          37970        Europe
## 6          43490        Europe
## 7          52590        Europe
## 8          55290        Europe

Les variables suivantes sont présentes :

Pays : Cela se passe de commentaires !

PIB_nom : Produit intérieur brut en valeur nominale en USD

GDP_PPP: Produit intérieur brut contrôlé en fonction des différences de pouvoir d'achat

PIB_nom_par_capita : Produit intérieur brut en valeur nominale en USD par habitant

PIB_PPP_par_habitant : Produit intérieur brut contrôlé pour tenir compte des différences de pouvoir d'achat par habitant.

RNB par habitant : Revenu national brut de chaque pays par habitant.

Région : région du monde où se trouve le pays.

Pour commencer, traçons un simple diagramme à barres du PIB nominal de chaque pays.

ggplot(econdata, aes(x=Country, y=GDP_nom))+
  geom_bar(stat='identity', fill="forest green")+
  ylab("GDP (nominal)")
parcelle

Vous pouvez également tracer une autre variable, le PIB corrigé des PPA.

ggplot(econdata, aes(x=Country, y=GDP_PPP))+
  geom_bar(stat='identity', fill="forest green")+
  ylab("GDP (PPP)")
parcelle

Vous obtenez ainsi un deuxième graphique distinct, similaire au précédent mais utilisant une variable différente. Supposons que vous souhaitiez représenter le PIB (nominal) et le PIB (PPA) ensemble. Pour ce faire, vous utiliserez la technique de la facette. Tout d'abord, vous devrez reformater vos données, en passant d'un format "large" avec chaque variable dans sa propre colonne à un format "long", dans lequel vous utilisez une colonne pour vos mesures et une autre pour une variable clé nous indiquant quelle mesure nous utilisons dans chaque ligne.

econdatalong <- gather(econdata, key="measure", value="value", c("GDP_nom", "GDP_PPP"))

Une fois que vous avez les données dans un tel format, vous pouvez utiliser notre variable clé pour tracer des facettes. Construisons un graphique simple, montrant à la fois le PIB nominal (à partir de notre premier graphique) et le PIB (PPA) (à partir de notre deuxième graphique). Pour ce faire, il vous suffit de modifier votre code pour ajouter +facet_wrap() et spécifier que ~measure, notre variable clé, doit être utilisée pour les facettes.

ggplot(econdatalong, aes(x=Country, y=value))+
  geom_bar(stat='identity', fill="forest green")+
  facet_wrap(~measure)
parcelle

Cela fonctionne, mais vous remarquerez à quel point les noms de pays sont écrasés. Réorganisons nos panneaux.

Personnalisation de la mise en page et réorganisation

La commande facet_wrap() choisira automatiquement le nombre de colonnes à utiliser. Vous pouvez le spécifier directement en utilisant ncol=, comme suit :

ggplot(econdatalong, aes(x=Country, y=value))+
  geom_bar(stat='identity', fill="forest green")+
  facet_wrap(~measure,  ncol=1)
parcelle

Vous avez probablement remarqué que les pays, sur l'axe des x ci-dessus, sont classés par ordre alphabétique. Si vous souhaitez modifier cette situation, le moyen le plus simple est de définir les niveaux du facteur Country. Effectuons cette réorganisation en classant les pays par ordre de PIB nominal total.

econdata$Country <- factor(econdata$Country, levels= econdata$Country[order(econdata$GDP_nom)])


econdatalong <- gather(econdata, key="measure", value="value", c("GDP_nom", "GDP_PPP"))


ggplot(econdatalong, aes(x=Country, y=value))+
  geom_bar(stat='identity', fill="forest green")+
  facet_wrap(~measure,  ncol=1)
parcelle

Vous pouvez également effectuer quelques personnalisations supplémentaires, comme déplacer les étiquettes des facettes vers le côté gauche avec l'argument strip.position.

ggplot(econdatalong, aes(x=Country, y=value))+
  geom_bar(stat='identity', fill="forest green")+
  facet_wrap(~measure,  ncol=1, strip.position = "left")
parcelle

Facettes d'étiquetage

Vous avez peut-être remarqué que les facettes ont des titres simples et courts, tirés des niveaux du facteur measure. Mettons de l'ordre dans tout cela et donnons à nos facettes des étiquettes plus agréables. Pour ce faire, vous créerez une fonction d'étiquetage simple, variable_labeller, qui renverra le nom approprié lorsqu'on lui demandera l'une des valeurs de variable_names. Ensuite, vous transmettez cette fonction à l'argument labeller de facet_wrap.

variable_names <- list(
  "GDP_nom" = "GDP (nominal)" ,
  "GDP_PPP" = "GDP (purchasing power parity)"
)


variable_labeller <- function(variable,value){
  return(variable_names[value])
}


ggplot(econdatalong, aes(x=Country, y=value))+
  geom_bar(stat='identity', fill="forest green")+
  facet_wrap(~measure,  ncol=1, labeller=variable_labeller)
parcelle

Jouer avec les gammes et l'espace

Construisons un graphique à facettes plus large, en utilisant chacune des mesures économiques.

econdatalong <- gather(econdata, key="measure", value="value", c( "GDP_nom" , "GDP_PPP" ,"GDP_nom_per_capita", "GDP_PPP_per_capita" ,"GNI_per_capita"))

variable_names <- list(
  "GDP_nom" = "GDP (nominal)" ,
  "GDP_PPP" = "GDP (purchasing power parity)",
  "GDP_nom_per_capita" = "GDP (nominal) per capita",
  "GDP_PPP_per_capita" = "GDP (purchasing power parity) per capita",
  "GNI_per_capita"  = "GNI per capita"
)


variable_labeller <- function(variable,value){
  return(variable_names[value])
}



ggplot(econdatalong, aes(x=Country, y=value))+
  geom_bar(stat='identity', fill="forest green")+
  facet_wrap(~measure,  ncol=1, labeller= variable_labeller)+
scale_y_continuous(breaks = pretty(econdatalong$value, n = 10))
parcelle

Ce n'est pas bon du tout ! Vous ne pouvez pas voir les valeurs de trois des panneaux. Comment cela se fait-il ? Jetons un coup d'œil aux données primaires pour comprendre pourquoi.

summary(econdata)
##     Country     GDP_nom            GDP_PPP         GDP_nom_per_capita
##  Ireland:1   Min.   :  333994   Min.   :  343682   Min.   : 8643     
##  Canada :1   1st Qu.: 2350773   1st Qu.: 1457187   1st Qu.:39512     
##  France :1   Median : 3684816   Median : 3503268   Median :44814     
##  Germany:1   Mean   : 6027118   Mean   : 7202368   Mean   :44992     
##  Sweden :1   3rd Qu.: 6657754   3rd Qu.: 8919260   3rd Qu.:54789     
##  Japan  :1   Max.   :19390600   Max.   :23159107   Max.   :70638     
##  (Other):2                                                           
##  GDP_PPP_per_capita GNI_per_capita            Region
##  Min.   :16807      Min.   : 8690   Asia         :2  
##  1st Qu.:43327      1st Qu.:38405   Europe       :4  
##  Median :49174      Median :43180   North America:2  
##  Mean   :48094      Mean   :42215                    
##  3rd Qu.:53322      3rd Qu.:53265                    
##  Max.   :72632      Max.   :58270                    
##

Si vous examinez chaque colonne, vous constaterez que les valeurs de chaque colonne s'échelonnent sur quelques ordres de grandeur. Par défaut, les facettes utilisent les mêmes limites et plages pour les axes X et Y. Pour modifier cela, vous pouvez ajouter cet extrait au code de votre facette : scales="free_y" afin que chaque facette utilise sa propre échelle indépendante.

ggplot(econdatalong, aes(x=Country, y=value))+
  geom_bar(stat='identity', fill="forest green")+
  facet_wrap(~measure, scales="free_y", ncol=1,  labeller= variable_labeller)
parcelle

C'est beaucoup mieux. Chaque facette dispose désormais d'un axe des ordonnées indépendant.

Utilisation des facettes pour créer des subdivisions

Vous avez peut-être remarqué que notre ensemble de données comprend également la variable Region, qui indique la région dans laquelle se trouve le pays en question. Vous pouvez utiliser cette variable pour colorer nos barres en fonction de la région, comme suit :

ggplot(econdatalong, aes(x=Country, y=value, fill=Region))+
  geom_bar(stat='identity')+
  facet_wrap(~measure, scales="free_y", ncol=1, labeller= variable_labeller)
parcelle

Cependant, cela est un peu désordonné, ne serait-il pas préférable de placer chacune des différentes régions dans leur propre sous-panneau ? Eh bien, avec le facettage, c'est possible ! Ici, vous allez utiliser facet_grid au lieu de facet_wrap, car cela facilitera la mise en correspondance de nos facettes avec deux variables, Region et measure, où toutes ces deux variables sont réparties sur les lignes et les colonnes d'une grille de parcelles. Notez que vous définissez également scales="free" et space="free", ce qui permet à nos différents panneaux d'occuper des espaces différents. Vous devrez également créer une nouvelle fonction d'étiquetage, qui produira des noms pour les lignes et les étiquettes.

variable_names <- list(
  "GDP_nom" = "GDP \n(nominal)" ,
  "GDP_PPP" = "GDP \n(PPP)",
  "GDP_nom_per_capita" = "GDP (nominal)\n per capita",
  "GDP_PPP_per_capita" = "GDP (PPP)\n per capita",
  "GNI_per_capita"  = "GNI \nper capita"
)



region_names <- levels(econdata$Region)


variable_labeller2 <- function(variable,value){
  if (variable=='measure') {
  return(variable_names[value])
  } else {
    return(region_names)
  }
}

ggplot(econdatalong, aes(x=Country, y=value, fill=Region))+
  geom_bar(stat='identity')+
  facet_grid(measure~Region, scales="free", space="free_x",  labeller= variable_labeller2)
parcelle

C'est maintenant beaucoup plus clair ! Chaque région a sa propre colonne de panneaux et chaque indicateur a sa propre ligne de barres.

C'est à peu près tout ce qu'il faut savoir pour ce tutoriel. J'espère que vous avez apprécié d'apprendre ce que sont les facettes.

Si vous souhaitez en savoir plus sur les facettes, suivez le cours de DataCamp sur la visualisation des Big Data avec Trelliscope.

Consultez notre site Getting Started with the Tidyverse : Tutoriel.

Sujets

R Cours

cours

Introduction to R

4 hr
2.8M
Master the basics of data analysis in R, including vectors, lists, and data frames, and practice R with real data sets.
Afficher les détailsRight Arrow
Commencer le cours
Voir plusRight Arrow
Apparenté

blog

2022-2023 Rapport annuel DataCamp Classrooms

À l'aube de la nouvelle année scolaire, DataCamp Classrooms est plus motivé que jamais pour démocratiser l'apprentissage des données, avec plus de 7 650 nouveaux Classrooms ajoutés au cours des 12 derniers mois.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

8 min

blog

Les 20 meilleures questions d'entretien pour les flocons de neige, à tous les niveaux

Vous êtes actuellement à la recherche d'un emploi qui utilise Snowflake ? Préparez-vous à répondre à ces 20 questions d'entretien sur le flocon de neige pour décrocher le poste !
Nisha Arya Ahmed's photo

Nisha Arya Ahmed

20 min

blog

Q2 2023 DataCamp Donates Digest

DataCamp Donates a offert plus de 20k bourses d'études à nos partenaires à but non lucratif au deuxième trimestre 2023. Découvrez comment des apprenants défavorisés et assidus ont transformé ces opportunités en réussites professionnelles qui ont changé leur vie.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

blog

Les 32 meilleures questions d'entretien sur AWS et leurs réponses pour 2024

Un guide complet pour explorer les questions d'entretien AWS de base, intermédiaires et avancées, ainsi que des questions basées sur des situations réelles. Il couvre tous les domaines, garantissant ainsi une stratégie de préparation bien équilibrée.
Zoumana Keita 's photo

Zoumana Keita

30 min

blog

Célébration de Saghar Hazinyar : Une boursière de DataCamp Donates et une diplômée de Code to Inspire

Découvrez le parcours inspirant de Saghar Hazinyar, diplômée de Code to Inspire, qui a surmonté les défis en Afghanistan et s'est épanouie grâce à une bourse de DataCamp Donates.
Fereshteh Forough's photo

Fereshteh Forough

4 min

blog

Nous avons fait don de bourses DataCamp Premium à un million de personnes, et ce n'est pas fini.

Réparties entre nos deux programmes d'impact social, DataCamp Classrooms et #DCDonates, les bourses offrent un accès illimité à tout ce que DataCamp Premium a à offrir.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

Voir plusVoir plus