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 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.
- 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 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é des arguments suivants :
- 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 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)))
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 :
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 :
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 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 :
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" )
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 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 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 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 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" )
Explication du code
- 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 :
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" )
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 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 :
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 :
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 :
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") |