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 extraction de données, 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 métier de data scientist peut être revu ci-après.wing image

  • 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 le sous-jacent concepts et modèles.
  • 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 la communicationplex analyse.

paquet ggplot2

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

Dans ce tutoriel, vous allez utiliser le package ggplot2. Ce package est construit sur le sous-jacent cohérent du livre Grammar of Graphics écrit par Wilkinson, 2005. ggplot2 est très flexible, intègre de nombreux thèmes et spécifications d'intrigue à un niveau élevé d'abstraction. Avec ggplot2, vous ne pouvez pas tracer de graphiques en 3 dimensions et créer des graphiques interactifs.

Dans ggplot2, un graphe est composé de ce qui suitwing arguments:

  • données
  • cartographie esthétique
  • 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()

Explication du code

  • 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 readable 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)))

Explication du code

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

Explication du code

  • Vous transformez les variables x et y en log() directement dans le mappage aes().

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

Explication du code

  • graphique : vous stockez votre graphique dans le graphique variable. Il est utile pour une utilisation ultérieure ou à éviter trop complex ligne de codes
  • 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 havenJe n'ai 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"
         )

Explication du code

  • 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	

Mise en situation :

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

Explication du code

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

Explication du code

  • Dans le lab(), vous avez ajouté :
    • title = « Relation entre Mile par hours et merde » : 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 details, 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"
    )

Explication du code

  • Dans le lab(), vous avez ajouté :
    • x = « Définition Drat » : Changer le nom de l'axe des x
    • y = « Mille par hours" : Changer 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 disposerez de quatre numbers, 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"
    )

Explication du code

  • 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 numbers de 2.4 à 3.4 avec un pas de 3
    • seq(1, 1.6, by = 0.1) : Créez sept numbers 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

Notes: À 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 additionnermariUtilisez 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()
Épargnez
ggsave("my_fantastic_plot.png")