knitr::opts_chunk$set( collapse = TRUE, comment = "#>", echo = TRUE ) library(dplyr) library(magrittr)
Nous aurons besoin du package ggplot2
:
ggplot2
est bien installélibrary(ggplot2)
Nous allons également avoir besoin des données fruits :
data("fruits", package = "tidyViz")
{width=50%}
{width=100%}
La fonction de base pour les diagrammes en bâtons est barplot
:
barplot(table(fruits$groupe))
Avec des couleurs :
barplot(table(fruits$groupe), col = 1:4)
ggplot(data = fruits, aes(x = groupe, fill = groupe)) + geom_bar()
STOP !
ggplot
: création d'un canevas vide dans on va dessiner le(s) graphe(s)aes
: déclaration des paramètres esthétiques du graphes (position horizontale, verticale, couleur épaisseur, forme, transparence etc...)geom_bar
: utilisation d'une géométrie {width=100%}
{width=100%}
{width=100%}
{width=80%}
{width=100%}
Données data
Les données à représenter. Chaque ligne représente un élément à représenter graphiquement.
Géométries geom_
Les formes à créer pour représenter les données. Cela peut être des points, des lignes, des surfaces etc.
Esthétiques aes()
Les paramètres esthétiques de ces formes. Par exemple la position, la couleur, la taille, la forme, la transparence etc.
Échelles scale_
Des fonctions permettant de paramétrer la transformation de données en formes ou en objets graphiques. Par exemple la fonction scale_color_manual
permet de choisir soi-même les couleurs à utiliser dans un graphique.
Comment corriger la commande suivante pour obtenir le graphe à droite ?
ggplot(***, aes(***, fill = Sucres > 10)) + geom_***()
{width=100%}
ggplot
"1" (voir ici){width=50%}
Nous allons voir ensemble quelques géométries particulières qui permettent de créer des graphes classiques.
geom_bar
Diagramme en bâtons sur des données non-agrégées
geom_col
Diagramme en bâtons (encore) sur des comptages existants
geom_histogram
Histogramme d'une variable quantitative
geom_boxplot
Diagramme de Tukey aka "boîte à moustache" aka boxplot
geom_violin
Diagramme en "violons"
geom_point
Nuage de points créé à partir de deux variables quantitatives
geom_line
Ligne tracée à partir de deux variables quantitatives
On a déjà vu comment faire :
ggplot(fruits, aes(cut(Eau, c(0, 84.2, 100)))) + geom_bar(fill = "steelblue")
S'utilise quand on dispose déjà de comptages.
dat.count <- fruits %>% group_by(groupe) %>% summarize(Csup10 = sum(VitamineC >= 10)) ggplot(data = dat.count, aes(x = groupe, y = Csup10)) + geom_col()
Comment modifier les deux commandes précédentes pour faire un diagramme en bâtons montrant des pourcentages plutôt que des comptages bruts ?
(PS : il y a plus d'une solution possible)
ggplot(fruits, aes(Sucres)) + geom_bar()
ggplot(fruits, aes(Sucres)) + geom_histogram()
Représente des comptages de :
Représente des comptages ou des densités de :
Pour ce genre de graphe, il est important de choisir les intervalles sur lesquels les données seront énumérées.
{width=80%}
ggplot(fruits, aes(Sucres)) + geom_histogram()
Dans un document R Markdown, comment faire pour ne pas afficher le message dans votre rapport ?
... il y a plusieurs solutions possibles...
ggplot(fruits, aes(Sucres)) + geom_histogram(breaks = seq(0, 75, 5))
ggplot(fruits, aes(Sucres)) + geom_histogram(breaks = seq(0, 75, 5))
ggplot(fruits, aes(Sucres)) + geom_histogram(breaks = seq(0, 75, 5), fill = "steelblue")
ggplot(fruits, aes(Sucres)) + geom_histogram(breaks = seq(0, 75, 5), fill = "steelblue")
ggplot(fruits, aes(Sucres)) + geom_histogram(breaks = seq(0, 75, 5), fill = "steelblue", color = "white")
ggplot(fruits, aes(Sucres)) + geom_histogram(breaks = seq(0, 75, 5), fill = "steelblue", color = "white")
{width=100%}
ggplot(data=fruits, aes(x = Sucres)) + geom_boxplot()
ggplot(data=fruits, aes(x=groupe, y=Sucres)) + geom_boxplot()
ggplot(data=fruits, aes(x = Sucres, y = 1)) + geom_violin()
ggplot(data=fruits, aes(x = groupe, y = Sucres)) + geom_violin()
Complétez le code suivant pour obtenir la figure de droite :
ggplot(fruits, aes(x = Fibres > 1.5, y = Proteines, fill = ***)) + geom_***()
{width=100%}
Les thèmes sont des fonctions qui permettent de modifier certains paramètres graphiques comme :
Exemple de fonctions thèmes (theme_***()
) :
theme_bw()
: pour un thème en noir et blanc,theme_minimal()
: pour un thème minimaliste,theme_void()
: pour un thème dépouillétheme_bw()
ggplot(fruits, aes(Fibres)) + geom_histogram() + theme_bw()
theme_minimal()
ggplot(fruits, aes(Fibres)) + geom_histogram() + theme_minimal()
theme_void()
ggplot(fruits, aes(Fibres)) + geom_histogram() + theme_void()
theme_bw
avec la commande ?theme_bw
ggplot(fruits, aes(y = Fibres)) + geom_boxplot() + theme_***()
{width=100%}
ggtitle
xlab
ylab
Mais je vous conseille d'utiliser la fonction labs
qui permet de faire tout cela, et plus !
labs( title = "Titre du graphe", subtitle = "Sous-titre du graphe", x = "Titre de l'axe des x", y = "Titre de l'axe des y", color = "Titre de la légende des couleurs", shape = "Titre de la légende des formes" )
Avec la fonction theme()
, qui a une syntaxe bien particulière : chaque élément doit être spécifié selon sa nature.
element_text(size=, colour = "", family = "")
element_line(colour=“”, size=)
element_rect(fill = "")
theme()
axis.title
, axis.title.x
, axis.title.y
: taille, police, couleur, ...axis.text
, axis.text.x
, axis.text.y
: taille, police, couleur, ...axis.ticks
, axis.ticks.x
, axis.ticks.y
axis.line
, axis.line.x
, axis.line.y
panel.background
: couleur panel.grid.major
, panel.grid.minor
: couleur, taillelegend.text
: taille, police, couleurlegend.position
plot.title
: taille, police, couleurgeom_point
Cette géométrie nécessite des paramètres esthétiques de position (en $x$ et $y$), et accepte optionnellement des paramètres esthétiques de taille, couleur et forme.
ggplot(fruits, aes(x = Phosphore, y = Calcium, size = Magnesium)) + geom_point()
Lorsqu'ils sont spécifiés dans la fonction aes()
, ces paramètres appliquent les valeurs d'une variable à une caractéristique des objets graphiques tracés par les géométries.
color
ou colour
: couleur du pointfill
: couleur de remplissagesize
: tailleshape
: formealpha
: transparencelinetype
: type de lignelabel
: étiquettesLorsqu'ils sont appliqués en dehors de la fonction aes()
, leur comportement est plus général !
ggplot(fruits, aes(x = Phosphore, y = Calcium, color = Magnesium)) + geom_point() + theme(legend.position = "bottom")
ggplot(fruits, aes(x = Phosphore, y = Calcium)) + geom_point(color = "limegreen")
Complétez la commande suivante pour obtenir le graphe ci-contre.
ggplot(fruits, aes(x = Sucres, y = Proteines, *** = Magnesium, *** = ***)) + geom_***() + ***(title = "Fruits", x = "Sucres (g/100 g)", y = "Protéines, N x 6.25 (g/100 g)", size = "Magnésium\n(mg/100 g)", ***= "Groupe") + theme_***()
{width=100%}
Pas de panique, on peut utiliser la transparence (aka alpha
) :
ggplot(fruits, aes(x = Phosphore, y = Calcium, color = groupe)) + geom_point(alpha = 0.5, size = 2) + theme_bw() + theme(legend.position = "bottom")
ggplot(fruits, aes(x = Phosphore, y = Calcium, color = groupe)) + geom_point(alpha = 0.5, size = 2) + theme_bw() + theme(legend.position = "bottom")
scale_***
{.smaller}Ces fonctions vont vous permettre de personnaliser l'échelle, en $x$, en $y$, mais pas seulement ! Ce concept est généraliser dans ggplot2
à de nombreux paramètres esthétiques. Par exemple :
scale_x_log10()
permet de transformer l'échelle des $x$ en échelle logarithmique,scale_y_log10()
permet de transformer l'échelle des $y$ en échelle logarithmique,scale_color_manual()
permet de personnaliser les couleurs,scale_fill_manual()
permet de personnaliser les couleurs de remplissage,scale_x_continuous()
permet de personnaliser l'axe des $x$ lorsque $x$ est une variable "continue",scale_y_discrete()
permet de personnaliser l'axe des $y$ lorsque $y$ est une variable "discrète",scale_x_continuous()
permet de personnaliser l'axe des $x$ lorsque $x$ est une variable "discrète",scale_y_discrete()
permet de personnaliser l'axe des $y$ lorsque $y$ est une variable "discrète".Complétez la commande suivante pour obtenir le graphe ci-contre.
ggplot(fruits, aes(Phosphore, Calcium)) + geom_point(*** = "white") + scale_***() + scale_***() + labs(x = "log10(Phosphore)", y = "log10(Calcium)") + theme_dark()
{width=100%}
coord_***
Pour modifier le système de coordonnées après avoir appliquer toutes les transformations spécifiées auparavant (par une fonction scale_***
par exemple). Par exemple :
coord_fixed
pour fixer le ratio des unités de l'axe des $y$ sur les unités de l'axe des $x$,coord_equal
quand ce ratio vaut 1,coord_flip
pour échanger les axes,coord_polar
pour passer d'un système de coordonnées cartésien à un système de coordonnées polairesTransformez les coordonnées du graphe suivant en coordonnées polaires (coord_polar(theta = "y")
). Quel est le résultat ?
ggplot(fruits, aes(x = 1, fill = groupe)) + geom_bar(width = 1) + theme_void()
*lim*
Change le minimum et le maximum d'un axe. Attention, toutes les valeurs en dehors des nouveaux axes sont éliminées !
xlim
, ylim
ou lims
pour spécifier l'étendue,expand_limits
pour étendre l'étendue à certaines valeurs.Pour faire un "zoom" sans perdre de points, il faut utiliser la fonction coord_cartesian
ou une fonction du type scale_***
facet_wrap
S'uilise pour diviser le graphe en panneaux selon les modalités d'une variable catégorielle.
Attention à la syntaxe : elle est basée sur l'utilisation du terme vars
, qui permet d'accéder aux variables du jeu de données spécifié.
Par exemple, pour diviser le graphe g
en plusieurs panneaux selon les modalités d'un facteur fac
, on écrira
g + facet_wrap(facets = vars(fac))
On peut également utiliser une "formule" :
g + facet_wrap(~ fac)
ggplot(fruits, aes(x = Phosphore, y = Calcium, color = groupe)) + geom_point() + facet_wrap(vars(Sucres > 10)) + theme_bw() + theme(legend.position = "bottom")
ggplot(fruits, aes(x = Phosphore, y = Calcium, color = groupe)) + geom_point() + facet_wrap(vars(Sucres > 10)) + theme_linedraw() + theme(legend.position = "bottom")
facet_grid
S'utilise de la même façon que facet_wrap
.
Par exemple, pour diviser le graphe g
en plusieurs panneaux selon les modalités d'un facteur factorow
pour les lignes et factocol
pour les colonnes, on écrira
g + facet_grid(rows = vars(factorow), cols = vars(factocol))
On peut aussi utiliser une formule :
g + facet_grid(factorow ~ factocol)
CONSEIL : pour l'utilisation de facettes, faites attention à bien nommer les modalités de vos facteurs pour rendre le graphe plus clair.
Fonctionnement et exemple :
g <- ggplot(fruits, aes(groupe)) + geom_bar() ggsave(filename = "mongraphe.png", plot = g)
L'extension donnée dans filename
sera magiquement détectée pour sauvegarder le fichier au bon format !
Nous avons vu un package de représentations graphiques très puissant ! ggplot2
fonctionne sur la base d'un canevas, de paramètres esthétiques comme la position en $x$, en $y$, les couleurs, la forme etc. A partir de ces paramètres, on va tracer les graphes à l'aides de géométries, qui peuvent se superposer !
ggplot2
est très complet... et très complexe{width=50%}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.