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.

  • 📍 Syntaxe de base : ggplot(mtcars, aes(x = drat, y = mpg)) + geom_point() construit le graphique à partir des données et de la cartepinget la géométrie.
  • ???? Coloriage en groupe : aes(color = factor(gear)) à l'intérieur de geom_point() divise les points en une couleur par niveau de facteur.
  • 📈 Lignes de tendance : stat_smooth(method = “lm”) superpose une ligne de régression ajustée, et se = FALSE supprime la bande de confiance.
  • 🇧🇷 Facettage : La fonction facet_wrap() dessine un panneau par groupe sur une échelle partagée, ce qui est préférable à l'encombrement de toutes les séries dans un seul graphique.
  • (I.e. Surtraçage : Diminuez l'alpha, faites vibrer les points ou passez à geom_hex() lorsque les marqueurs s'empilent les uns sur les autres.
  • (I.e. Exportation: ggsave(“plot.png”, width = 8, height = 5, dpi = 300) écrit le dernier graphique dans le répertoire de travail.

Nuage de points en R avec ggplot2

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.

Nuage de points dans R

  • 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 de base

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 :

Nuage de points avec des groupes

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 :

Changer d'axe

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 :

Nuage de points avec valeurs ajustées

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

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 titre avec un nom dynamique

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 :

Ajouter un sous-titre

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 :

Renommer l'axe X et l'axe Y

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 :

Contrôler la balance

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 :

Thème

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 :

Enregistrer les tracés

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")

FAQ

La fonction geom_point() dessine chaque observation à ses coordonnées exactes. La fonction geom_jitter() ajoute un léger décalage aléatoire afin de distinguer les points ayant la même valeur, ce qui est important lorsqu'un axe contient des valeurs discrètes.

La fonction `aes()` associe une couleur à une variable ; ggplot2 attribue alors une nuance à chaque niveau et construit une légende. En dehors de `aes()`, la couleur est une constante fixe appliquée à chaque point, et aucune légende n'apparaît.

Ajoutez `stat_smooth(method = “lm”)` ou `geom_smooth(method = “lm”)` après `geom_point()`. Définissez `se = FALSE` pour masquer la bande de confiance et utilisez `method = “loess”` pour un lissage non linéaire.

Les nuages ​​de points révèlent la corrélation des caractéristiques et les valeurs aberrantes avant l'entraînement, et ils constituent la méthode standard pour afficher les valeurs prédites par rapport aux valeurs réelles ou pour visualiser les groupes après une réduction de dimensionnalité avec PCA ou t-SNE.

Oui. Les assistants IA peuvent créer des calques, suggérer des corrections de superposition et expliquer les erreurs, comme l'absence d'une fonction aes(). Testez le code généré avec vos propres données, car il est facile de se tromper dans les noms de colonnes et les types de facteurs.

Résumez cet article avec :