Nuage de points en R avec ggplot2 (exemple)
⚡ Résumé intelligent
Un nuage de points en R utilisant ggplot2 permet de représenter deux variables continues sur les axes x et y grâce à la fonction geom_point(). Ce tutoriel aborde les points suivants :ping par couleur, transformations logarithmiques, lignes de régression ajustées, étiquettes, facettes, corrections de superposition, échelles, thèmes et enregistrement.
Pourquoi les graphiques sont importants dans l'analyse des données
Les graphiques constituent la troisième partie du processus d’analyse des données. La première partie concerne données extracproduction, la deuxième partie traite de nettoyer et manipuler les données. Enfin, le data scientist devra peut-être communiquer graphiquement ses résultats.
Le flux de travail d'un data scientist est résumé dans l'image ci-dessous.
- La première tâche d’un data scientist est de définir une question de recherche. Cette question de recherche dépend des objectifs et des buts du projet.
- Après cela, l’une des tâches les plus importantes est l’ingénierie des fonctionnalités. Le data scientist doit collecter, manipuler et nettoyer les données
- Une fois cette étape terminée, il peut commencer à explorer l’ensemble de données. Parfois, il est nécessaire d’affiner et de modifier l’hypothèse initiale en raison d’une nouvelle découverte.
- When the explicatif l’analyse est réalisée, le data scientist doit considérer la capacité du lecteur à comprendre les concepts et les modèles sous-jacents.
- Ses résultats doivent être présentés dans un format compréhensible par toutes les parties prenantes. L'une des meilleures méthodes pour communiquer les résultats passent par un graphique.
- Les graphiques sont un outil incroyable pour simplifier une analyse complexe.
Le reste de ce tutoriel explique comment construire ces graphiques avec le package ggplot2.
Le package ggplot2
Ce tutoriel est consacré à la création de graphiques en R avec ggplot2.
Dans ce tutoriel, vous allez utiliser le package ggplot2. Ce package implémente la grammaire des graphiques décrite par Leland Wilkinson en 2005. ggplot2 est flexible, propose de nombreux thèmes et vous permet de définir un graphique avec un haut niveau de détail.traction. Notez qu'il ne produit pas de graphiques tridimensionnels ou interactifs ; ceux-ci nécessitent des packages tels que plotly ou rgl.
Dans ggplot2, un graphe est composé des arguments suivants :
- données,
- carte esthétiqueping
- objet géométrique
- transformations statistiques
- Balance
- système de coordonnées
- ajustements de position
- facettage
Vous apprendrez à contrôler ces arguments dans le didacticiel.
La syntaxe de base de ggplot2 est :
ggplot(data, mapping=aes()) + geometric object arguments: data: Dataset used to plot the graph mapping: Control the x and y-axis geometric object: The type of plot you want to show. The most common object are: - Point: `geom_point()` - Bar: `geom_bar()` - Line: `geom_line()` - Histogram: `geom_histogram()`
Comment créer un nuage de points avec R
Voyons comment ggplot fonctionne avec l'ensemble de données mtcars. Vous commencez par tracer un nuage de points de la variable mpg et de la variable drat.
Nuage de points de base
library(ggplot2) ggplot(mtcars, aes(x = drat, y = mpg)) + geom_point()
Code Explication
- Vous transmettez d'abord l'ensemble de données mtcars à ggplot.
- À l’intérieur de l’argument aes(), vous ajoutez l’axe des x et l’axe des y.
- Le signe + signifie que vous voulez que R continue à lire le code. Cela rend le code plus lisible en le cassant.
- Utilisez geom_point() pour l'objet géométrique.
Sortie :
Nuage de points avec des groupes
Parfois, il peut être intéressant de distinguer les valeurs par groupe de données (c'est-à-dire les données au niveau des facteurs).
ggplot(mtcars, aes(x = mpg, y = drat)) + geom_point(aes(color = factor(gear)))
Code Explication
- La fonction aes() à l'intérieur de geom_point() contrôle la couleur de chaque groupe.ping La variable doit être un facteur, donc l'engrenage est enveloppé dans factor().
- Au total, vous avez le code aes(color = factor(gear)) qui change la couleur des points.
Sortie :
Modifier l'échelle des axes avec une transformation logarithmique
Le rééchelonnement des données représente une part importante du travail d'analyste, car les variables brutes suivent rarement une distribution en cloche régulière. La transformation logarithmique permet de compresser les valeurs extrêmes et de rendre le graphique moins sensible aux valeurs aberrantes.
ggplot(mtcars, aes(x = log(mpg), y = log(drat))) + geom_point(aes(color = factor(gear)))
Code Explication
- Vous transformez les variables x et y dans log() directement à l'intérieur de la fonction map aes().ping.
Notez que toute autre transformation peut être appliquée telle que la standardisation ou la normalisation.
Sortie :
Nuage de points avec valeurs ajustées
Vous pouvez ajouter un autre niveau d'information au graphique. Vous pouvez superposer les valeurs ajustées d'un régression linéaire.
my_graph <- ggplot(mtcars, aes(x = log(mpg), y = log(drat))) + geom_point(aes(color = factor(gear))) + stat_smooth(method = "lm", col = "#C42126", se = FALSE, size = 1) my_graph
Code Explication
- my_graph : le graphique est stocké dans l’objet my_graph, ce qui permet d’ajouter des couches ultérieurement sans avoir à répéter l’appel complet.
- L'argument stat_smooth() contrôle la méthode de lissage
- méthode = « lm » : Régression linéaire
- col = « #C42126 » : Code pour la couleur rouge de la ligne
- se = FALSE : ne pas afficher l'erreur standard
- size = 1 : l’épaisseur de la ligne. Dans ggplot2 3.4.0 et versions ultérieures, cet argument a été renommé linewidth pour les géométries de ligne.
Sortie :
Notez que d'autres méthodes de lissage sont disponibles
- gm
- guibole
- loess : valeur par défaut pour moins de 1 000 observations
- rlm : modèle linéaire robuste, du package MASS
Avant de styliser le graphique, il est utile de savoir quand un nuage de points est le bon choix.
Diagramme de dispersion vs graphique linéaire vs BubblGraphique en R
Les trois graphiques comparent deux variables continues, le choix se résume donc à ce que le lecteur doit retenir.
| Critères | Nuage de points | Graphique linéaire | Bubble Graphique |
|---|---|---|---|
| Spectacles | Corrélation entre deux variables | Variation d'une variable sur un axe ordonné | Corrélation plus une troisième magnitude |
| Axe X | Toute variable continue | Généralement, le temps ou une autre échelle ordonnée | Toute variable continue |
| Ordre des points | Défaut de pertinence | Points critiques, ils sont connectés | Défaut de pertinence |
| Troisième variable | Par la couleur ou la forme | Par des lignes séparées | Taille du point |
| appel ggplot2 | point_géométrique() | ligne_géométrique() | geom_point(aes(taille = z)) |
Relier des points dispersés par une ligne lorsque l'axe des abscisses n'est pas ordonné est une erreur fréquente : cela sous-entend une séquence inexistante. Réservez la fonction `geom_line()` aux axes ordonnés, comme les dates. Pour les distributions d'une seule variable, utilisez… boîte à moustaches à la place.
Ajouter des informations au graphique
Pour l'instant, les graphiques ne comportent aucun texte explicatif. Le lecteur doit pouvoir comprendre les données du graphique sans consulter de documentation supplémentaire ; il est donc nécessaire d'ajouter des étiquettes claires. Vous pouvez ajouter des étiquettes avec la fonction `labs()`.
La syntaxe de base de la fonction labs() est :
labs(title = "Hello Guru99") arguments: - title: Main title displayed above the plot - subtitle: Secondary line below the title - caption: Note below the plot, usually the data source - x: Rename the x-axis - y: Rename the y-axis - color / fill: Rename the legend Example: labs(title = "Hello Guru99", subtitle = "My first plot")
Ajouter un titre
Une information obligatoire à ajouter est évidemment un titre.
my_graph +
labs(
title = "Plot Mile per hours and drat, in log"
)
Code Explication
- my_graph : Vous utilisez le graphique que vous avez stocké. Cela évite de réécrire tous les codes à chaque fois que vous ajoutez de nouvelles informations au graphique.
- Vous placez le titre à l'intérieur de labs().
Sortie :
Ajouter un titre avec un nom dynamique
Un titre dynamique est utile pour ajouter des informations plus précises dans le titre.
Vous pouvez utiliser la fonction coller() pour imprimer du texte statique et du texte dynamique. La syntaxe de base de paste() est :
paste("This is a text", A) arguments - " ": Text inside the quotation marks are the static text - A: Display the variable stored in A - Note you can add as much static text and variable as you want. You need to separate them with a comma
Exemple :
A <- 2010
paste("The first year is", A)
Sortie :
## [1] "The first year is 2010"
B <- 2018
paste("The first year is", A, "and the last year is", B)
Sortie :
## [1] "The first year is 2010 and the last year is 2018"
Vous pouvez ajouter un nom dynamique à notre graphique, à savoir la moyenne des mpg.
mean_mpg <- mean(mtcars$mpg) my_graph + labs( title = paste("Plot Mile per hours and drat, in log. Average mpg is", mean_mpg) )
Code Explication
- Vous créez la moyenne de mpg avec Mean(mtcars$mpg) stocké dans la variable Mean_mpg
- Vous utilisez Paste() avec Mean_mpg pour créer un titre dynamique renvoyant la valeur moyenne de mpg
Sortie :
Ajouter un sous-titre
Deux autres détails permettent de mieux comprendre le graphique : le sous-titre et la légende. Le sous-titre se place juste en dessous du titre. La légende peut indiquer qui a effectué les calculs et la source des données.
my_graph +
labs(
title =
"Relation between Mile per hours and drat",
subtitle =
"Relationship break down by gear class",
caption = "Authors own computation"
)
Code Explication
- Dans la fonction labs(), vous avez ajouté :
- title = « Relation entre le mile par heure et le drat » : ajouter un titre
- subtitle = « Répartition des relations par classe d'équipement » : Ajouter un sous-titre
- caption = « Calcul propre aux auteurs : ajouter une légende
- Vous séparez chaque nouvelle information par une virgule, ,
- Notez que vous cassez les lignes de code. Ce n'est pas obligatoire, et cela permet seulement de lire le code plus facilement
Sortie :
Renommer l'axe X et l'axe Y
Les noms de colonnes sont rarement prêts pour la présentation. Ils sont souvent abrégés ou utilisent des tirets bas entre les mots, comme dans PIB_CAP. Renommez-les sur le graphique et ajoutez les unités pertinentes.
my_graph +
labs(
x = "Drat definition",
y = "Mile per hours",
color = "Gear",
title = "Relation between Mile per hours and drat",
subtitle = "Relationship break down by gear class",
caption = "Authors own computation"
)
Code Explication
- Dans la fonction labs(), vous avez ajouté :
- x = « Définition Drat » : Changer le nom de l'axe des x
- y = « Mile par heure » : modifiez le nom de l'axe y
Sortie :
Contrôler la balance
Vous pouvez contrôler l'échelle de l'axe.
La fonction seq() est pratique lorsque vous devez créer une séquence de nombres. La syntaxe de base est la suivante :
seq(begin, last, by = x)
arguments:
- begin: First number of the sequence
- last: Last number of the sequence
- by= x: The step. For instance, if x is 2, the code adds 2 to `begin-1` until it reaches `last`
Par exemple, une plage de 0 à 12 avec un pas de 4 renvoie quatre nombres : 0, 4, 8 et 12.
seq(0, 12,4)
Sortie :
## [1] 0 4 8 12
Vous pouvez contrôler l'échelle de l'axe x et de l'axe y comme ci-dessous
my_graph +
scale_x_continuous(breaks = seq(1, 3.6, by = 0.2)) +
scale_y_continuous(breaks = seq(1, 1.6, by = 0.1)) +
labs(
x = "Drat definition",
y = "Mile per hours",
color = "Gear",
title = "Relation between Mile per hours and drat",
subtitle = "Relationship break down by gear class",
caption = "Authors own computation"
)
Code Explication
- La fonction scale_y_continuous() contrôle le l'axe y
- La fonction scale_x_continuous() contrôle le axe des x.
- Le paramètre breaks contrôle la division de l’axe. Vous pouvez ajouter manuellement la séquence de nombres ou utiliser la fonction seq() :
- seq(1, 3.6, by = 0.2) : Crée la séquence de 1 à 3.6 par pas de 0.2, soit 14 points de rupture.
- seq(1, 1.6, by = 0.1) : Crée sept nombres de 1 à 1.6 par pas de 0.1.
Sortie :
Thème
Enfin, ggplot2 vous permet de personnaliser l'apparence de l'ensemble du graphique grâce à une simple fonction de thème. Huit thèmes complets sont fournis avec le package :
- thème_bw()
- thème_light()
- thème_classique()
- theme_linedraw()
- thème_dark()
- thème_minimal()
- thème_gris()
- thème_void()
my_graph +
theme_dark() +
labs(
x = "Drat definition, in log",
y = "Mile per hours, in log",
color = "Gear",
title = "Relation between Mile per hours and drat",
subtitle = "Relationship break down by gear class",
caption = "Authors own computation"
)
Sortie :
Enregistrer les tracés
Une fois toutes ces étapes terminées, il est temps d'enregistrer et de partager votre graphique. Appelez la fonction ggsave("nom_du_fichier.png") juste après le tracé et l'image sera enregistrée sur le disque.
Le graphique est enregistré dans le répertoire de travail. Pour vérifier le répertoire de travail, vous pouvez exécuter ce code :
directory <- getwd() directory
Tracez le graphique final, enregistrez-le et vérifiez où il aboutit :
my_graph +
theme_dark() +
labs(
x = "Drat definition, in log",
y = "Mile per hours, in log",
color = "Gear",
title = "Relation between Mile per hours and drat",
subtitle = "Relationship break down by gear class",
caption = "Authors own computation"
)
Sortie :
ggsave("my_fantastic_plot.png")
Sortie :
## Saving 5 x 4 in image
Note: À des fins pédagogiques uniquement, nous avons créé une fonction appelée open_folder() pour ouvrir le dossier répertoire pour vous. Il vous suffit d'exécuter le code ci-dessous et de voir où l'image est stockée. Vous devriez voir un fichier nommé my_fantastic_plot.png.
# Run this code to create the function open_folder <- function(dir) { if (.Platform['OS.type'] == "windows") { shell.exec(dir) } else { system(paste(Sys.getenv("R_BROWSER"), dir)) } } # Call the function to open the folder open_folder(directory)
Comment créer des nuages de points à facettes en R avec facet_wrap()
Le facettage est l'un des huit composants de ggplot2 mentionnés précédemment, et c'est la solution la plus simple pour un graphique surchargé. Au lieu de regrouper tous les éléments dans un seul panneau, ggplot2 dessine un petit multiple pour chaque niveau d'une variable, tous à la même échelle afin que les panneaux restent comparables.
# One panel per gear count ggplot(mtcars, aes(x = drat, y = mpg)) + geom_point() + facet_wrap(~ gear) + theme_classic()
Trois arguments suffisent à convaincre.
- ncol or maintenant: forcer les panneaux à adopter une disposition donnée, par exemple facet_wrap(~ gear, ncol = 2).
- BalancePar défaut, l'échelle est fixée à « fixed », ce qui signifie que tous les panneaux partagent la même plage d'axe. Utilisez « free_y » ou « free » lorsque les groupes présentent des différences d'amplitude importantes, mais sachez que les échelles libres rendent la comparaison visuelle entre les panneaux trompeuse.
- étiqueteuse: remplace le niveau de facteur brut dans chaque bande, par exemple labeller = label_both pour imprimer « gear: 4 » au lieu de « 4 ».
Deux groupesping variables. Utilisez facet_grid() pour construire une matrice de panneaux, la première variable étant disposée sur les lignes et la seconde sur les colonnes :
ggplot(mtcars, aes(x = drat, y = mpg)) + geom_point(aes(color = factor(cyl))) + facet_grid(am ~ gear) + theme_classic()
Facettes ou couleurs ? La couleur est efficace jusqu'à environ quatre groupes sur un graphique avec un chevauchement limité. Au-delà, ou lorsque les groupes se chevauchent fortement, le facettage est plus lisible car chaque panneau ne contient que ses propres points. Vous pouvez combiner les deux : facettage selon une variable et couleur selon une autre, comme dans l'exemple `facet_grid()` ci-dessus.
Comment gérer la superposition de points dans les nuages de points R
Avec quelques dizaines d'observations, chaque point est visible. Avec des milliers, les marqueurs se superposent et la région la plus dense apparaît comme une simple tache compacte. surplomberet ggplot2 propose quatre solutions standard.
1. Réduire l'opacité. La solution la moins coûteuse. Chevauchementping Les points s'assombrissent naturellement, la densité devient donc visible :
ggplot(diamonds, aes(x = carat, y = price)) + geom_point(alpha = 0.05) + theme_classic()
2. Valeurs discrètes instables. Lorsqu'une variable ne prend qu'un nombre limité de valeurs, les points convergent vers les mêmes coordonnées. Un léger décalage aléatoire les sépare :
ggplot(mtcars, aes(x = factor(cyl), y = mpg)) + geom_jitter(width = 0.15, height = 0) + theme_classic()
Définissez la hauteur à 0 afin que les valeurs y, qui contiennent les informations réelles, ne soient jamais modifiées.
3. Jetez l'avion. Pour les grands ensembles de données, comptez les observations par cellule et associez ce nombre à une couleur. Les cases hexagonales permettent d'éviter les artefacts visuels produits par les cases carrées.
ggplot(diamonds, aes(x = carat, y = price)) + geom_hex(bins = 40) + theme_classic()
4. Tracer les contours de densité. Les lignes de contour délimitent les régions où les observations se concentrent et se superposent parfaitement aux points estompés :
ggplot(diamonds, aes(x = carat, y = price)) + geom_point(alpha = 0.05) + geom_density_2d(color = "#C42126") + theme_classic()
En règle générale, alpha gère quelques milliers de points, le regroupement hexagonal gère des dizaines de milliers, et l'échantillonnage des données avec dplyr::slice_sample() est l'option pragmatique au-delà de cela.
Nuage de points dans R : Code Références
Le tableau ci-dessous répertorie l'appel ggplot2 pour chaque option abordée ci-dessus :
| Objectif | Code |
|---|---|
| Nuage de points de base |
ggplot(df, aes(x = x1, y = y)) + geom_point() |
| Diagramme de dispersion avec groupe de couleurs |
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x2))) |
| Ajouter des valeurs ajustées |
ggplot(df, aes(x = x1, y = y)) + geom_point() + stat_smooth(method = "lm") |
| Ajouter un titre |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(title = paste("Hello Guru99")) |
| Ajouter un sous-titre |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(subtitle = paste("Hello Guru99")) |
| Renommer x |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(x = "X1") |
| Renommer y |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(y = "y1") |
| Contrôler l'échelle |
ggplot(df, aes(x = x1, y = y)) + geom_point() + scale_y_continuous(breaks = seq(10, 35, by = 10)) + scale_x_continuous(breaks = seq(2, 5, by = 1)) |
| Créer des journaux |
ggplot(df, aes(x = log(x1), y = log(y))) + geom_point() |
| Thème |
ggplot(df, aes(x = x1, y = y)) + geom_point() + theme_classic() |
| Facette par un groupe |
ggplot(df, aes(x = x1, y = y)) + geom_point() + facet_wrap(~ x2) |
| Gérer le sur-découpage |
ggplot(df, aes(x = x1, y = y)) + geom_point(alpha = 0.3) |
| Enregistrer |
ggsave("my_fantastic_plot.png")
|













