carat scale

Transcription

carat scale
Master Mathématiques et Applications
Spécialité Statistique
Septembre 2016
Fiche 4
Graphiques avec ggplot2
Le package ggplot2 est un outil de plus en plus utilisé pour représenter des données. Les graphes proposés par ggplot2
sont généralement plus élaborés et mieux finalisés que les graphes effectués avec les fonctions classiques de R. Ce
package permet également d’obtenir des représentations graphiques par sous-groupes d’individus avec très peu de
code. Les légendes sont le plus souvent gérées automatiquement. La syntaxe de ggplot2 est spécifique et totalement
différente de celle des graphiques conventionnels de R. Cette fiche n’en présente qu’une simple introduction.
1
Premiers graphes avec ggplot2
Il faut bien entendu commencer par installer le package ggplot2. On considère le jeu de données diamonds qui contient le
prix ainsi que certaines caractéristiques de 54000 diamants. Afin d’avoir des représentations graphiques moins lourdes,
on se restreint à un sous-échantillon de taille 5000 :
> library(ggplot2)
> diamants <- diamonds[sample(nrow(diamonds),5000),]
L’approche ggplot2 consiste à séparer les instructions qui vont permettre d’obtenir la représentation graphique souhaitée. Prenons l’exemple d’un diagramme en barres pour la variable cut qui représente la qualité de la coupe du
diamant. Afin d’obtenir une telle représentation on doit spécifier :
— le jeu de données : diamants ;
— la variable que l’on souhaite représenter : cut ;
— le type de représentation souhaitée : diagramme en barres.
On utilise cette décomposition pour construire le graphe comme suit :
> ggplot(diamants)+aes(x=cut)+geom bar()
Le jeu de données est renseigné dans la fonction ggplot, la variable à représenter dans la fonction aes, le type de
représentation souhaitée est spécifié ensuite par la fonction geom bar(). Les 3 instructions sont séparées par un + .
C’est le schéma classique de construction de graphes avec ggplot2. En utilisant un protocole identique, on obtiendra
l’histogramme de la variable continue price avec
> ggplot(diamants)+aes(x=price)+geom histogram()
Les deux représentations précédentes nécessitent la spécification d’une seule variable : cut pour le diagrame en barres
et price pour l’histogramme. De nombreuses représentations nécessitent plus d’une variable. Par exemple, dans le cas
d’un nuage de points, deux variables sont à spécifier. Il suffit d’indiquer ces deux variables dans la fonction aes. Ainsi,
si on souhaite représenter le prix d’un diamant en fonction de son nombre de carats, on utilisera :
> ggplot(diamants)+aes(x=carat,y=price)+geom point()
2
La grammaire ggplot
Comme nous venons de le voir, une représentation graphique ggplot se construit à partir d’un ensemble d’éléments
indépendants. Ces éléments constituent la grammaire de la syntaxe. Les principaux éléments de la grammaire sont :
— Data (ggplot) : le jeu de données qui contient les variables que l’on veut représenter ;
— Aesthetics (aes) : spécification des variables à représenter, on inclut également les couleurs, les tailles des
objets à représenter ;
— Geometrics (geom ...) : spécification du type de représentation graphique souhaitée ;
— Statistics (stat ...) : spécification d’éventuelles transformations des données pour la représentation souhaitée ;
— Scales (scale ...) : permet de contrôler le lien entre les données et les aesthetics (modification de couleurs,
gestion des axes...).
Nous présentons dans la suite quelques notions élémentaires sur ces différents éléments.
1
2.1
Data et aesthetics
Ces deux éléments de la grammaire servent à spécifier le jeu de données et les variables que l’on souhaite représenter.
Le jeu de données est un dataframe que l’on renseignera dans le fonction ggplot. Les variables seront spécifiées dans
la fonction aes. Si on souhaite par exemple représenter la variable price en fonction de carat, on utilisera
> ggplot(diamants)+aes(x=carat,y=price)
La fonction aes admet également des arguments tels que color, size, fill. Ces arguments sont à utiliser lorsqu’une
couleur ou une taille est définie à partir d’une variable du jeu de données. Si pour la représentation précédente on
souhaite une couleur différente selon les modalités de la variable cut, on ajoutera color=cut dans aes :
> ggplot(diamants)+aes(x=carat,y=price,color=cut)
2.2
Geometrics
Les commandes du paragraphe précédent ne renvoient pas de graphes ! Elles servent uniquement à définir les variables
du jeu de données que l’on veut représenter. L’élément geom ... permet d’ajouter le type de représentation que l’on
souhaite. Pour obtenir le nuage carat×price avec une couleur différente selon cut, on exécutera donc
> ggplot(diamants)+aes(x=carat,y=price,color=cut)+geom point()
Nous remarquons sur cette figure qu’une légende précisant le code couleur est ajoutée directement. Le tableau 1
donne quelques exemples de fonctions (accompagnés des aesthetics) permettant de faire les représentations graphiques
classiques.
Geom
geom point()
geom line()
geom abline()
geom path()
geom text()
geom rect()
Description
Nuage de points
Ligne (ordonnées selon x)
Droite
Ligne (ordre original)
Texte
Rectangle
geom
geom
geom
geom
geom
geom
geom
geom
Polygone
Segment
Diagramme en barres
Histogramme
Boxplots
Densité
Lignes de contour
Lissage
polygon()
segment()
bar()
histogram()
boxplot()
density()
contour()
smooth()
Tous
Aesthetics
x, y, shape, fill
x, y, linetype
slope, intercept
x, y, linetype
x, y, label, hjust, vjust
xmin, xmax, ymin, ymax
fill, linetype
x, y, fill, linetype
x, y, fill, linetype
x, fill, linetype, weight
x, fill, linetype, weight
x, y, fill, weight
x, y, fill, linetype
x, y, fill, linetype
x, y, fill, linetype
color, size, group
Table 1 – Exemples de geom et aesthetics.
Chaque geom admet également des arguments particuliers permettant de modifier le graphe (couleur, taille de points,
épaisseur de traits, etc.). Si on souhaite par exemple représenter un nuage de points rouges, c’est dans la fonction
geom point, non dans la fonction aes, qu’il faudra mettre l’argument color. De même, pour faire un diagramme en
barres bleu, on utilisera fill="blue" dans geom bar :
> ggplot(diamants)+aes(x=carat,y=price)+geom point(color="red")
> ggplot(diamants)+aes(x=cut)+geom bar(fill="blue")
2.3
Statistics
De nombreuses représentations graphiques ne se déduisent pas directement des données, elles nécessitent de transformer
des variables ou de calculer des indicateurs à partir des variables. Lorsque la transformation est fonctionnelle, il suffit
de spécifier cette transformation dans la fonction aes. On représentera par exemple la fonction sinus sur [−2π, 2π]
avec
2
> D <- data.frame(X=seq(-2*pi,2*pi,by=0.01))
> ggplot(D)+aes(x=X,y=sin(X))+geom line()
D’autres représentations nécessitent des transformations plus complexes que l’application d’une fonction usuelle. C’est
par exemple le cas de l’histogramme où il faut calculer le nombre d’individus dans chaque classe pour déduire la
hauteur de l’histogramme. Les statistics permettent de gérer ces éléments intermédiaires dans les graphes ggplot.
Ils sont renseignés dans l’argument stat des fonctions geom .... Pour geom histogram, la valeur par défaut est par
exemple stat=bin. Cet argument permet de calculer 4 indicateurs :
— count : nombre de points dans chaque classe ;
— density : densité pour chaque classe ;
— ncount : équivalent de count modifié de manière à ce que la valeur maximale soit de 1 ;
— ndensity : équivalent de density modifié de manière à ce que la valeur maximale soit de 1.
La fonction geom histogram permettra ainsi de représenter en ordonnée le premier de ces 4 indicateurs, en l’occurence
count. Ainsi, la commande
> ggplot(diamonds)+aes(x=price)+geom histogram(bins=40)
renvoie l’histogramme où figure en ordonnée le nombre d’individus par classe, non la densité. Si on souhaite visualiser
un autre indicateur sur l’axe des ordonnées, il faudra préciser son nom dans la fonction aes en utilisant le format
..nom... Pour représenter l’histogramme de la densité, on utilisera donc
> ggplot(diamonds)+aes(x=price,y=..density..)+geom histogram(bins=40)
Le package ggplot2 possède une alternative à la modification des indicateurs via l’argument stat dans les fonctions
geom ... : il s’agit des fonctions stat .... On pourra par exemple obtenir un lissage via la méthode loess en utilisant
> ggplot(diamants)+aes(x=carat,y=price)+geom smooth(method="loess")
ou en utilisant la fonction stat smooth :
> ggplot(diamants)+aes(x=carat,y=price)+stat smooth(method="loess")
Tout comme les fonctions geom ... possède un argument stat, les fonctions stat ... possèdent un argument geom. En
modifiant ce argument, on changera la représentation graphique. On a par exemple
> ggplot(diamants)+aes(x=carat,y=price)+stat smooth(method="loess",geom="point")
> ggplot(diamants)+aes(x=carat,y=price)+stat smooth(method="loess",geom="line")
Le tableau 2 présente quelques exemples de fonctions stat ....
Stat
stat identity()
stat bin()
stat density()
stat smooth()
stat boxplot()
Description
Aucune transformation
Comptage
Densité
Lissage
Boxplot
Paramètres
binwidth, origin
adjust, kernel
method, se
coef
Table 2 – Exemples de statistics.
De nombreuses représentations graphiques pourront être obtenues en utilisant soit les fonctions de type geom ..., soit
les fonctions de type stat .... C’est à l’utilisateur de choisir sa syntaxe préférée.
2.4
Scales
Les scales contiennent tous les paramètres qui permettent de faire le lien entre les données (data) et les aesthetics. Ils
définissent ce qui est vu par l’œil : couleurs, axes, tailles, etc. On les modifie le plus souvent pour affiner le graphe :
modifier les palettes de couleur, gérer les axes, les tailles des points... Les fonctions scales sont nommées selon le même
schéma :
— elles commencent par scale ;
— suivi du nom de l’aesthetics que l’on souhaite modifier (color , fill , x ...) ;
— et se terminent par le nom du scale : manual, identity...
On pourra par exemple modifier la couleur des points du graphe vu précédemment avec la commande
3
aes
Couleur (color et fill)
Position (x et y)
Forme
Discrètes
brewer
grey
hue
identity
manual
discrete
Continues
gradient
gradient2
gradientn
continous
date
shape
identity
manual
identity
manual
Taille
size
Table 3 – Exemples de scales en fonction des aesthetics et des types de variables.
> ggplot(diamants)+aes(x=carat,y=price,color=cut)+geom point()+
scale color manual(values=c("Fair"="black","Good"="yellow",
"Very Good"="blue","Premium"="red","Ideal"="green"))
Le tableau 3 présente les principaux types de scales.
Voici quelques exemples concrets d’utilisation des scales :
— Couleurs d’un diagramme en barre : on construit le diagramme en barre de la variable cut en utilisant
une couleur différente pour chaque barre :
> p1 <- ggplot(diamants)+aes(x=cut)+geom bar(aes(fill=cut))
> p1
On change la couleur des barres en utilisant la palette Purples :
> p1+scale fill brewer(palette="Purples")
— Dégradé de couleur pour un nuage de points : on s’intéresse au nuage de points carat×price avec une
échelle de couleur définie par la variable continue depth :
> p2 <- ggplot(diamants)+aes(x=carat,y=price)+geom point(aes(color=depth))
> p2
On modifie le dégradé de couleur en proposant un nouveau dégradé allant du jaune au rouge à l’aide de
scale color gradient :
> p2+scale color gradient(low="red",high="yellow")
— Gestion des axes et de la légende : on peut modifier la graduation de l’axe des abcisses, le nom de l’axe
des ordonnées et celui de la variable de la légende du graphe p2 avec
> p2+scale x continuous(breaks=seq(0.5,3,by=0.5))+scale y continuous(name="prix")
+scale color gradient("Profondeur")
4