Nuage de points dans R en utilisant ggplot2 (avec exemple)

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 travail du data scientist peut รชtre revu dans lโ€™image suivante

  • 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.

paquet ggplot2

Cette partie du didacticiel se concentre sur la faรงon de crรฉer des graphiques/diagrammes avec R.

Dans ce tutoriel, vous utiliserez le package ggplot2. Ce package repose sur les principes fondamentaux de l'ouvrage ยซ Grammar of graphics ยป de Wilkinson (2005). ggplot2 est trรจs flexible et intรจgre de nombreux thรจmes et spรฉcifications de graphiques ร  un haut niveau d'abstraction.tracAvec ggplot2, il est impossible de tracer des graphiques 3D et de crรฉer des graphiques interactifs.

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()`

nuage de points

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

  • L'aes() ร  l'intรฉrieur de geom_point() contrรดle la couleur du groupe. Le groupe doit รชtre une variable factorielle. Ainsi, vous convertissez le rapport variable en facteur.
  • Au total, vous avez le code aes(color = factor(gear)) qui change la couleur des points.

Sortie :

Nuage de points avec des groupes

Changer d'axe

Redimensionner les donnรฉes constitue une grande partie du travail du data scientist. Dans de rares occasions, les donnรฉes se prรฉsentent sous une jolie forme de cloche. Une solution pour rendre vos donnรฉes moins sensibles aux valeurs aberrantes consiste ร  les redimensionner.

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 tracer la valeur ajustรฉe d'une 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

  • graphique : vous stockez votre graphique dans le graphique variable. Il est utile pour une utilisation ultรฉrieure ou pour รฉviter une ligne de codes trop complexe
  • 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 : la taille de la ligne est 1

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
  • jante

Ajouter des informations au graphique

Jusqu'ร  prรฉsent, nous n'avons pas ajoutรฉ d'informations dans les graphiques. Les graphiques doivent รชtre informatifs. Le lecteur devrait voir lโ€™histoire derriรจre lโ€™analyse des donnรฉes simplement en regardant le graphique sans consulter de documentation supplรฉmentaire. Par consรฉquent, les graphiques ont besoin de bonnes รฉtiquettes. Vous pouvez ajouter des รฉtiquettes avec la fonction labs().

La syntaxe de base de lab() est :

lab(title = "Hello Guru99")
argument:
- title: Control the title. It is possible to change or add title with:			
- subtitle: Add subtitle below title			
- caption: Add caption below the graph			
- x: rename x-axis			
- y: rename y-axis			
Example:lab(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 enveloppez le titre dans le lab().
  • Code pour la couleur rouge de la ligne
  • se = FALSE : ne pas afficher l'erreur standard
  • size = 1 : la taille de la ligne est 1

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 dรฉtails supplรฉmentaires peuvent rendre votre graphique plus explicite. Vous parlez du sous-titre et de la lรฉgende. Le sous-titre se place juste en dessous du titre. La lรฉgende peut indiquer qui a effectuรฉ le calcul 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 le lab(), 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 variables elles-mรชmes dans l'ensemble de donnรฉes peuvent ne pas toujours รชtre explicites ou, par convention, utiliser le _ lorsqu'il y a plusieurs mots (c'est-ร -dire GDP_CAP). Vous ne voulez pas qu'un tel nom apparaisse dans votre graphique. Il est important de changer le nom ou d'ajouter plus de dรฉtails, comme les unitรฉs.

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 le lab(), 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, si vous souhaitez crรฉer une plage de 0 ร  12 avec un pas de 3, vous aurez quatre nombres, 0 4 8 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รฉez six nombres de 2.4 ร  3.4 avec un pas de 3
    • seq(1, 1.6, by = 0.1) : Crรฉez sept nombres de 1 ร  1.6 avec un pas de 1

Sortie :

Contrรดler la balance

Thรจme

Enfin, R nous permet de personnaliser notre intrigue avec diffรฉrents thรจmes. La bibliothรจque ggplot2 comprend huit thรจmes :

  • thรจme_bw()
  • thรจme_light()
  • theme_classis()
  • 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

Aprรจs toutes ces รฉtapes, il est temps de sauvegarder et de partager votre graphique. Vous ajoutez ggsave('NAME OF THE FILE) juste aprรจs avoir tracรฉ le graphique et il sera stockรฉ sur le disque dur.

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

Traรงons votre graphique fantastique, enregistrons-le et vรฉrifions l'emplacement

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)

Rรฉsumรฉ

Vous pouvez rรฉsumer les arguments pour crรฉer un nuage de points dans le tableau ci-dessous :

Objectif Code
Nuage de points de base
ggplot(df, aes(x = x1, y = y)) + geom_point()
Nuage de points avec groupe de couleurs
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1)) + stat_smooth(method = "lm")
Ajouter des valeurs ajustรฉes
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1))
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()
Enregistrer
ggsave("my_fantastic_plot.png")

Rรฉsumez cet article avec :