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