class: center, middle, inverse, title-slide # Informatique : Graphiques ## Licence 3 Economie-Gestion - Parcours Economie-Finance ### Ewen Gallic ### Aix-Marseille Université ### 2020-2021 (mise à jour: 2020-11-12) --- class: inverse, center, middle # 1. Structure <br/><br/><br/> <div style='text-align: center;'> <img src = "images/graphiques/parpaing.jpg" width = "300px" title = "Parpaing" /> </div> --- #### Plusieurs _packages_ - Créer des graphiques en R peut se faire à l'aide de plusieurs _packages_ : - `graphics`, - `lattice`, - `rgl`, - `ggplot2` ; - Nous allons aborder les graphiques réalisés avec `ggplot2`. --- #### Superposition de couches - Les graphiques avec `ggplot2` sont créés par <b class = "coul_1">couches</b> ("_layers_") ; - La première contient les données brutes ; - Les suivantes servent à mettre en forme ces données ; - Le tout s'appuie sur une <b class = "coul_1">grammaire graphique</b>. --- #### Grammaire - La grammaire créé une "carte" qui fait un <b class = "coul_1">plan</b> ("_mapping_") pour passer : - des données, - aux <b class = "coul_1">attributs esthétiques</b> (couleur, forme, taille, etc.) des <b class = "coul_1">objets géométriques</b> (points, lignes, polygones, etc.) ; - Elle permet également d'appliquer des <b class = "coul_1">transformations</b> aux données ; - Ou encore de faire du <b class = "coul_1">facettage</b> ("_faceting_"). --- #### Grammaire - Il est nécessaire de charger le <em>package</em> `ggplot2` (et de l'installer lors de la première utilisation) : ```r install.packages("ggplot2") library(ggplot2) ``` - L'aide en ligne est précieuse : http://docs.ggplot2.org/current/ --- #### Éléments de structure - Les éléments de la grammaire graphique de `ggplot2` sont : * des données brutes (`data`), * une projection graphique (`mapping`), * des objets géométriques (`geom`), * des transformations statistiques (`stats`), * des échelles (`scale`), * un système de coordonnées (`coord`), * une indication de regroupement éventuels (`facet`). --- #### Syntaxe - La création d'un graphique avec `ggplot2` commence par l'appel de la fonction `ggplot()` ; - On peut lui fournir les données et la projection graphique ; - Mais il faut lui ajouter (à l'aide de `+`) une couche indiquant la géométrie. ```r ggplot(data, aes(x, y)) + layers ``` - Les données doivent être dans un tableau de données --- class: inverse, center, middle # 2. Des graphiques élaborés avec ggplot() <br/><br/><br/> <div style='text-align: center;'> <img src = "images/graphiques/lego_data_2.jpg" height = "300px" title = "http://www.hotbutterstudio.com/#/alps/" /> <br/> <span class = "lien_source">Source : <a href = "http://www.hotbutterstudio.com/#/alps/">http://www.hotbutterstudio.com/#/alps/</a></span> </div> --- #### Données pour les exemples - Échantillon de 135 films (Source : Freebase – n'existe plus :/) ; - Informations sur : * nom, * date de sortie, * durée, * année, * budget estimé, * revenu brut estimé, * principal lieu de tournage, * abréviation du principal lieu de tournage. ```r load(url("http://egallic.fr/R/films.rda")) ``` --- #### Données pour les exemples - Créons une sous-base, qui ne concerne que quelques pays : ```r library(tidyverse) ``` ``` ## ── Attaching packages ──────────────────────────────────────────────────────────── tidyverse 1.3.0 ── ``` ``` ## ✓ ggplot2 3.3.2 ✓ purrr 0.3.4 ## ✓ tibble 3.0.4 ✓ dplyr 1.0.2 ## ✓ tidyr 1.1.2 ✓ stringr 1.4.0 ## ✓ readr 1.4.0 ✓ forcats 0.5.0 ``` ``` ## ── Conflicts ─────────────────────────────────────────────────────────────── tidyverse_conflicts() ── ## x dplyr::filter() masks stats::filter() ## x dplyr::lag() masks stats::lag() ``` ```r pays_liste <- c("United States of America", "New Zealand", "United Kingdom", "Spain") films_reduit <- films %>% filter(country %in% !!pays_liste) ``` --- #### Un premier graphique - Voici un premier exemple de graphique, un nuage de points : ```r ggplot(data = films, aes(x = estimated_budget, y = gross_revenue)) + geom_point() ``` <img src="graphiques_files/figure-html/unnamed-chunk-8-1.png" style="display: block; margin: auto;" /> --- #### Un premier graphique - Il est possible de stocker un graphique `ggplot2` dans une variable : ```r p <- ggplot(data = films, aes(x = estimated_budget, y = gross_revenue)) + geom_point() print(p) ``` <img src="graphiques_files/figure-html/unnamed-chunk-9-1.png" style="display: block; margin: auto;" /> --- class: titre_2, center, middle ## 2.1. Arguments esthétiques --- #### Arguments esthétiques - Parmi les arguments esthétiques : * `colour` : la couleur, * `shape` : la forme, * `size` : la taille, * `alpha` : la transparence, * `fill` : le remplissage ; - La valeur prise par ces arguments peut : * être identique pour toutes les observations, * dépendre d'une variable factorielle. --- #### Arguments esthétiques ```r ggplot(data = films, aes(x = estimated_budget, y = gross_revenue)) + geom_point(colour = "dodger blue", alpha = .8, aes(size = runtime)) ``` <img src="graphiques_files/figure-html/unnamed-chunk-10-1.png" style="display: block; margin: auto;" /> --- class: exo # Exercices 1. Créer un nuage de points représentant la durée des films en fonction de leur budget : * la couleur devra correspondre au budget estimé, * tester plusieurs valeurs de taille pour les points, * tester plusieurs valeurs de formes pour les points, * tester différentes valeurs de transparence. --- #### Agruments esthétiques - Lorsqu'un argument esthétique dépend d'une variable du tableau de données, une distinction est faite en fonction du mode de cette variable ; - Par exemple, pour une variable <b class = "coul_1">numérique</b> fournie à l'esthétique de couleurs, une <b class = "coul_1">échelle de couleurs</b> sera utilisée ; - Si en revanche la variable est un <b class = "coul_1">facteur</b>, une <b class = "coul_1">palette de couleurs</b> sera utilisée. --- #### Agruments esthétiques ```r ggplot() + geom_point(data = films, aes(x = estimated_budget, y = gross_revenue, col = runtime)) ``` <img src="graphiques_files/figure-html/unnamed-chunk-11-1.png" style="display: block; margin: auto;" /> --- #### Agruments esthétiques ```r ggplot() + geom_point(data = films, aes(x = estimated_budget, y = gross_revenue, col = country)) ``` <img src="graphiques_files/figure-html/unnamed-chunk-12-1.png" style="display: block; margin: auto;" /> --- class: titre_2, center, middle ## 2.2. Fonctions géométriques --- #### Fonctions géométriques - Les arguments géométriques indiquent quel type de représentation on souhaite afficher ; - On précise ce type en ajoutant une couche au graphique : * `geom_point()` : tracer des points ; * `geom_line()` : tracer des lignes ; * `geom_polygon()` : tracer des lignes ; * `geom_path()` : tracer des points dans l’ordre du data frame ; * `geom_step()` : faire un graphique en escalier ; * `geom_boxplot()` : tracer une boîte à moustache ; * `geom_jitter()` : mettre des points côte à côte pour une variable catégorielle ; * `geom_smooth()` : ajouter une courbe de tendance ; * `geom_histogram()` : tracer un histogramme ; * `geom_bar()` : tracer un diagramme en bâton ; * `geom_density()` : tracer une estimation de densité. --- #### Fonctions géométriques - Les fonctions `geom_*` possèdent des arguments optionnels (voici les principaux) : * `data` : données brutes à représenter, * `mapping` : projection graphique à employer, * `stat` : transformation statistique, * `position` : des positions pour éviter le chevauchement ; - Lorsque ces arguments sont omis, les valeurs automatiquement attribuées sont héritées de celles de `ggplot()`. --- #### Points - Nous l'avons déjà employée: la fonction `geom_point()` permet de faire des nuages de points. ```r ggplot(data = films, aes(x = estimated_budget, y = gross_revenue, col = country)) + geom_point() ``` <img src="graphiques_files/figure-html/unnamed-chunk-14-1.png" style="display: block; margin: auto;" /> --- #### Points - Pour tracer les points, il est nécessaire de préciser les données brutes et le _mapping_ ; - Nous l'avons fait lors de l'appel de `ggplot()` ; - Il est également possible de le faire lors de l'appel de `geom_point()` ; - Attention à bien mettre `data = ` ! ```r ggplot() + geom_point(data = films, aes(x = estimated_budget, y = gross_revenue, col = country)) ``` <img src="graphiques_files/figure-html/unnamed-chunk-15-1.png" style="display: block; margin: auto;" /> --- #### Points - Attention, pour que tous les points aient la même couleur, il faut que l'argument esthétique `colour` soit fourni à `geom_point()` et non pas à `ggplot()` ! ```r ggplot(data = films, aes(x = estimated_budget, y = gross_revenue)) + geom_point(colour = "red") ``` <img src="graphiques_files/figure-html/unnamed-chunk-16-1.png" style="display: block; margin: auto;" /> --- #### Lignes - Si on souhaite joindre les points, on peut utiliser `geom_line()` ; ```r ggplot(data = films, aes(x = estimated_budget, y = gross_revenue, col = country)) + geom_line() ``` <img src="graphiques_files/figure-html/unnamed-chunk-17-1.png" style="display: block; margin: auto;" /> --- #### Lignes - Le fait d'ajouter l'esthétique `colour` qui dépend d'une variable facteur du `data.frame` créé automatiquement des groupes ; - Si on souhaite conserver les groupes, mais ne pas proposer différentes couleurs, on peut utiliser l'argument `group` : ```r ggplot(data = films, aes(x = estimated_budget, y = gross_revenue, group = country)) + geom_line() ``` <img src="graphiques_files/figure-html/unnamed-chunk-18-1.png" style="display: block; margin: auto;" /> --- #### Polygones - Les polygones se tracent à l'aide de `geom_polygon()` ; - Les coordonnées doivent être rangées dans le sens indirect ; - Dans la plupart des fonctions utilisant des polygones, la première et la dernières observations doivent être identiques, pour permettre de fermer le polygon ; - Ce n'est pas obligatoire avec `ggplot2`. ```r df <- data.frame(x = c(0, 0.2, 1, 0.75), y = c(0, 1, 1, 0.5)) ggplot() + geom_polygon(data = df, aes(x = x, y = y), fill = "light green") ``` <img src="graphiques_files/figure-html/unnamed-chunk-19-1.png" style="display: block; margin: auto;" /> --- #### Boxplot - Les boîtes à moustaches (_bow-and-whisker-plot_) sont réalisées avec `geom_boxplot()` ```r ggplot(data = films_reduit, aes(x = country, y = runtime, fill = country)) + geom_boxplot() ``` <img src="graphiques_files/figure-html/unnamed-chunk-20-1.png" style="display: block; margin: auto;" /> --- #### Boxplot - L'affichage du _boxplot_ d'une seule variable n'existait pas dans les premières versions de {`ggplot2`}. - Il était nécessaire de "tricher" en founrissant une variable facteur à une modalité à l'esthétique `x` (`x = factor(1)`) - On peut à présent ne plus utiliser cette astuce : la valeur en `x` est alors 0. ```r ggplot(data = films_reduit, aes(x = factor(1), y = runtime)) + geom_boxplot() ``` <img src="graphiques_files/figure-html/unnamed-chunk-21-1.png" style="display: block; margin: auto;" /> --- #### Gigue - Quand on a des points entassés, il est possible de les placer côte-à-côte pour faciliter la visualisation ; ```r ggplot(data = films_reduit, aes(x = country, y = estimated_budget, col = country)) + geom_point() ``` <img src="graphiques_files/figure-html/unnamed-chunk-22-1.png" style="display: block; margin: auto;" /> --- #### Gigue - Pour ce faire, on utilise `geom_jitter()` ```r ggplot(data = films_reduit, aes(x = country, y = estimated_budget, col = country)) + geom_jitter() ``` <img src="graphiques_files/figure-html/unnamed-chunk-23-1.png" style="display: block; margin: auto;" /> --- #### Courbe de tendance - L'ajout d'une courbe de tendance peut se faire de plusieurs façons ; - Par exemple, on peut utiliser `geom_smooth()` : ```r ggplot(data = films, aes(x = estimated_budget, y = gross_revenue)) + geom_point() + geom_smooth() ``` <img src="graphiques_files/figure-html/unnamed-chunk-24-1.png" style="display: block; margin: auto;" /> --- #### Courbe de tendance - On vient de voir qu'il est possible d'ajouter facilement une autre couche ; - Il suffit d'appeler une autre fonction `geom_*()` ! ```r ggplot() + layer_1 + layer_2 + ... ``` --- #### Courbe de tendance - L'argument le plus important de `geom_smooth()` est `method` ; - Il gère le type de lissage à utiliser (`lm`, `glm`, `gam`, `loess`, `rlm`) ; - Par défaut, si les données sont moins de 1000, `loess` est utilisé, sinon, `gam` est employé ; - Au besoin, la formule à utiliser pour le lissage se paramètre avec `formula` ; - Il est possible de ne pas afficher les intervalles de confiance (`se=FALSE`) ; - Le niveau des intervalles de confiance peut être changé _via_ `level` ; - Voir l'aide de la fonction `stat_smooth()` pour plus de détails. --- #### Courbe de tendance Par exemple, avec un lissage par régression linéaire, avec des intervalles de confiance de prévision à 90% : ```r ggplot(data = films, aes(x = estimated_budget, y = gross_revenue)) + geom_point() + stat_smooth(method = "lm", level = 0.9) ``` ``` ## `geom_smooth()` using formula 'y ~ x' ``` <img src="graphiques_files/figure-html/unnamed-chunk-26-1.png" style="display: block; margin: auto;" /> --- #### Histogramme - Les histogrammes se font avec `geom_histogram()` ; - On peut choisir la fenêtre _via_ l'argument `binwidth` ; - La fenêtre par défaut est 1/30 de l'étendue. ```r ggplot(data = films_reduit, aes(x = (estimated_budget/1000000)/runtime, fill = country)) + geom_histogram(binwidth = 0.1, colour = "dark grey") ``` <img src="graphiques_files/figure-html/unnamed-chunk-27-1.png" style="display: block; margin: auto;" /> --- #### Densité - Une estimation de la densité, avec un noyau gaussien, s'effectue avec `geom_density()` ; - Le noyau peut être changé _via_ l'argument `kernel` ; - La page d'aide `?stat_density` fournit plus de détails. ```r ggplot(data = films_reduit, aes(x = (estimated_budget/1000000)/runtime, fill = country)) + geom_density(colour = "black", alpha = .5) ``` <img src="graphiques_files/figure-html/unnamed-chunk-28-1.png" style="display: block; margin: auto;" /> --- class: exo # Exercices À partir du jeu de données `diamonds` : 1. Créer le tableau de données `diamonds_s`, _i.e._, un échantillon de `diamonds` de taille `\(n = 1000\)` 2. Représenter le nuage de points du prix (`price`) en fonction de la masse (`carat`), afficher les points en rouge ; 3. Reprendre le graph de la question 2 en colorant les points en fonction de la coupe (`cut`) ; 4. Afficher l'histogramme des masses des diamants (`carat`), avec une fenêtre de 0.05 ; 5. Afficher les boîtes à moustaches de la masse (`carat`) pour chaque coupe (`cut`). --- class: titre_2, center, middle ## 2.3. Fonctions statistiques --- #### Fonctions statistiques - Les fonctions `geom_*()` s'appuient, pour certaines, sur des fonctions `stat_*()` ; - Ces fonctions permettent d'effectuer des opérations statistiques sur les données brutes ; - Des variables sont créées lors de l'appel à ces fonctions ; - On peut accéder à ces variables... à condition de connaître leur nom ! --- #### Fonctions statistiques - Par exemple, pour produire un histogramme, la fonction `geom_histogram()` s'appuie sur `stat_bin()` ; - La fonction `stat_bin()` créé et retourne (entre autres) : * la variable `count`, qui indique le nombre d'observations pour chaque intervalle, * la variable `density`, qui donne une estimation de la densité de points dans chaque classe (avec mise à l'échelle pour que l'intégrale vaille 1 sur le support). ```r ggplot(data = films_reduit, aes(x = runtime)) + geom_histogram() ``` <img src="graphiques_files/figure-html/unnamed-chunk-30-1.png" style="display: block; margin: auto;" /> --- #### Fonctions statistiques - Si on désire afficher une estimation de la densité, plutôt que le nombre d'observations : * on va chercher la variable `density` retournée par `stat_bin()`, en entourant son nom de "`..`" : ```r ggplot(data = films_reduit, aes(x = runtime)) + geom_histogram(aes(y = ..density..)) ``` <img src="graphiques_files/figure-html/unnamed-chunk-31-1.png" style="display: block; margin: auto;" /> --- #### Fonctions statistiques - L'ajout d'une courbe de densité sur un histogramme se fait en additionnant deux couches ; - En faisant (silencieusement) appel à la fonction `stat_bin()` ; - Et en appelant la fonction `stat_density()` : ```r p <- ggplot(data = films_reduit, aes(x = runtime)) p + geom_histogram() + geom_line(stat="density", col = "red", size = 1.2) ``` <img src="graphiques_files/figure-html/unnamed-chunk-32-1.png" style="display: block; margin: auto;" /> --- #### Fonctions statistiques - Mais les valeurs de l'axe des ordonnées sont celles retournées par `stat_bin()` et `stat_density()` ! - On observe donc une densité toute plate. - Il suffit alors de changer le _mapping_ de l'argument esthétique `y` : * `y = ..density..` ; - La valeur utilisée pour l'axe des `y` sera donc la densité plutôt que le comptage. --- #### Fonctions statistiques ```r p <- ggplot(data = films_reduit, aes(x = runtime, y = ..density..)) p + geom_histogram(colour = "white") + geom_line(stat="density", col = "red", size = 1.2) ``` <img src="graphiques_files/figure-html/unnamed-chunk-33-1.png" style="display: block; margin: auto;" /> --- #### Fonctions statistiques | Fonction | Description | |----------|-------------| | `stat_bin()` | répartition des données en classes | | `stat_contour()` | calculer les contours des données en 3d | | `stat_density()` | estimation de densité 1d par la méthode du noyau | | `stat_density2d()` | estimation de densité 2d | | `stat_identity()` | ne transforme pas les données | | `stat_qq()` | qqplot (droite de Henry) | | `stat_quantile()` | quantiles continus | | `stat_smooth()` | lissage | | `stat_sum()` | somme les valeurs uniques | | `stat_summary()` | appliquer une fonction pour faire des summaries sur les valeurs de y | | `stat_unique()` | retire les valeurs dupliquées | --- #### Fonctions statistiques - Les fonctions principales de type `stat_*()` peuvent être : * appelées directement, * appelées _via_ l'argument `stat` d'une fonction `geom_*()`, en fournissant le suffixe. ```r ggplot(data = films_reduit, aes(x = runtime, y = ..density..)) + geom_line(stat="density", col = "red", size = 1.2) ``` <img src="graphiques_files/figure-html/unnamed-chunk-34-1.png" style="display: block; margin: auto;" /> --- class: exo # Exercices 1. Afficher l'histogramme des masses des diamants (`carat` dans le `data.frame` `diamonds`) ; 2. Afficher une estimation de la densité de la masse des diamants ; 3. Faire figurer sur un même graphique une visualisation de la répartition des masses de diamants, ainsi qu'une estimation de la densité. --- class: titre_2, center, middle ## 2.4. Échelles --- #### Les fonctions d'échelles - Les fonctions `scale_*()` permettent de <b class=coul_1>définir</b> et <b class=coul_1>contrôler</b> le _mapping_ entre les données et les attributs esthétiques ; - Chaque argument esthétique possède son échelle et sa fonction `scale_*()` ; - On peut décomposer les échelles en 4 catégories : * échelles de position, * échelles de couleur, * échelles manuelles discrètes, * _identity_ (pas de mise à l'échelle). --- #### Les fonctions d'échelles Le lien est donc fait entre : - Le <b class="coul_1">domaine</b> : l'espace de données. Si les données sont : * discrètes (facteurs, logiques, chaînes de caractères) : le domaine correspond à une énumération des valeurs possibles, * continues (numerique) : le domaine est un intervalle ; - La <b class="coul_1">gamme</b> : l'espace des esthétique. La gamme est : * discrète quand le domaine est discret, et consituée des valeurs correspondantes aux valeurs des données d'_input_, * continue quand le domaine est continu, et fournit alors un chemin indiquant comment passer d'une valeur à l'autre. --- #### Les fonctions d'échelles - Les échelles sont automatiquement créées lors de la création du graphique ; - On peut les modifier avec les fonctions `scale_*()` ; - Pour cela, il faut en ajouter une nouvelle, en couche supplémentaire ; - Le nom des échelles est composé de deux ou trois parties : * le préfixe `scale_`, * le nom de l'esthétique, * le nom de l'échelle à utiliser. - Exemple : pour changer l'échelle qui gère la couleur, en présence d'une variable continue dont dépend la couleur : `scale_colour_gradient()` --- #### Les fonctions d'échelles - Le graphique de base ```r p <- ggplot(data = films_reduit, aes(x = estimated_budget, y = gross_revenue, colour = runtime)) + geom_point() p ``` <img src="graphiques_files/figure-html/unnamed-chunk-36-1.png" style="display: block; margin: auto;" /> --- #### Les fonctions d'échelles - Changer l'échelle de couleur pour que : * les films les plus courts soient en jaunes, * les films les plus longs en rouge, * le tout en dégradé, * tout en changeant le titre de la légende. ```r p + scale_colour_gradient(name = "Runtime", low = "#FF0000", high ="#FFFF00") ``` <img src="graphiques_files/figure-html/unnamed-chunk-37-1.png" style="display: block; margin: auto;" /> --- #### Les fonctions d'échelles | Esthétique | Variable discrète | Variable continue | |------------|-------------------|-------------------| | Transparence (alpha) | `scale_alpha_discrete()` | `scale_alpha_continuous()` | | | `scale_alpha_manual()` | | | | `scale_alpha_identity()` | `scale_alpha_identity()` | | Couleur (colour) | `scale_colour_discrete()` | `scale_colour_continuous()` | | | `scale_colour_brewer()` | `scale_colour_dilstiller()` | | | `scale_colour_grey()` | `scale_colour_gradient()` | | | `scale_colour_hue()` | `scale_colour_gradient2()` | | | `scale_colour_manual()` | `scale_colour_gradientn()` | | | `scale_colour_identity()` | `scale_colour_identity()` | --- #### Les fonctions d'échelles | Esthétique | Variable discrète | Variable continue | |------------|-------------------|-------------------| | Remplissage (fill) | `scale_fill_discrete()` | `scale_fill_continuous()` | | | `scale_fill_brewer()` | `scale_fill_distiller()` | | | `scale_fill_grey()` | `scale_fill_gradient()` | | | `scale_fill_hue()` | `scale_fill_gradient2()` | | | `scale_fill_manual()` | `scale_fill_gradientn()` | | | `scale_fill_identity()` | `scale_fill_identity()` | | Type de ligne (linetype) | `scale_linetype_discrete()` | `scale_linetype_continuous()` | | | `scale_linetype_manual()` | | | | `scale_linetype_identity()` | `scale_linetype_identity()` |  | Forme | `scale_shape_discrete()` | `scale_shape_continuous()` | | | `scale_shape_manual()` | | | | `scale_shape_identity()` | `scale_shape_identity()` | --- #### Les fonctions d'échelles | Esthétique | Variable discrète | Variable continue | |------------|-------------------|-------------------| | Taille (size) | `scale_size_discrete()` | `scale_size_continuous()` | | | `scale_size_manual()` | `scale_size_area()` | | | `scale_size_identity()` | `scale_size_identity()` | | Position (x, y) | `scale_x_discrete()` | `scale_x_continuous()` | | | `scale_y_discrete()` | `scale_y_continuous()` | | | | `scale_x_date()` | | | | `scale_y_date()` | | | | `scale_x_datetime()` | | | | `scale_y_datetime()` | | | | `scale_x_log10()` | | | | `scale_y_log10()` | | | | `scale_x_reverse()` | | | | `scale_y_reverse()` | | | | `scale_x_sqrt()` | | | | `scale_y_sqrt()` | --- #### Les fonctions d'échelles - Revenu en fonction du budget ; - Taille et couleur des points : dépend du revenu et de la longueur, resp. ; - Couleur : dépend d'une variable discrète ; - Taille : dépend d'une variable continue. ```r p <- ggplot(data = films_reduit, aes(x = estimated_budget, y = gross_revenue, colour = country, size = runtime)) + geom_point() ``` --- #### Les fonctions d'échelles ```r p ``` <img src="graphiques_files/figure-html/unnamed-chunk-39-1.png" style="display: block; margin: auto;" /> --- #### Les fonctions d'échelles - Dégradé de gris pour la couleur ; - Valeurs manquantes en orange ; - Modification du titre de la légende. ```r p + scale_colour_grey(name = "Country", start = .1, end = .8, na.value = "orange") ``` <img src="graphiques_files/figure-html/unnamed-chunk-40-1.png" style="display: block; margin: auto;" /> --- #### Les fonctions d'échelles - Définissons nous-même la couleur pour chaque pays ; - Si on souhaite en plus afficher un nom différent, il faut faire attention à bien effectuer le matching... ; - La variable `country` est transformée en facteur ; - L'ordre est alphabétique (mais peut être changé avec la fonction `order()`) ```r levels(factor(films_reduit$country)) ``` ``` ## [1] "New Zealand" "Spain" ## [3] "United Kingdom" "United States of America" ``` --- ## Les fonctions d'échelles - Une première solution : ```r p + scale_colour_manual(name = "Country", values = c("red", "green", "blue", "orange"), labels = c("NZ", "ES", "UK", "USA")) ``` <img src="graphiques_files/figure-html/unnamed-chunk-42-1.png" style="display: block; margin: auto;" /> --- ## Les fonctions d'échelles - Une seconde solution, plus sûre... ```r (p <- p + scale_colour_manual(name = "Country", values = c("Spain" = "green", "New Zealand" = "red", "United States of America" = "orange", "United Kingdom" = "blue"), labels = c("Spain" = "ES", "New Zealand" = "NZ", "United States of America" = "USA", "United Kingdom" = "UK"))) ``` <img src="graphiques_files/figure-html/unnamed-chunk-43-1.png" style="display: block; margin: auto;" /> --- #### Les fonctions d'échelles - Changeons également la taille des points. ```r range(films_reduit$runtime) ``` ``` ## [1] 66 375 ``` ```r p + scale_size_continuous(name = "Film\nDuration", breaks = c(0, 60, 90, 120, 150, 300, Inf), range = c(1,10)) ``` <img src="graphiques_files/figure-html/unnamed-chunk-45-1.png" style="display: block; margin: auto;" /> --- #### Les fonctions d'échelles - Un autre graphique, avec des dates en abscisses ```r films_reduit$initial_release_date2 <- as.Date(films_reduit$initial_release_date) (p_2 <- ggplot(data = films_reduit, aes(x = initial_release_date2, y = runtime)) + geom_point()) ``` ``` ## Warning: Removed 3 rows containing missing values (geom_point). ``` <img src="graphiques_files/figure-html/unnamed-chunk-46-1.png" style="display: block; margin: auto;" /> --- #### Les fonctions d'échelles - La fonction `scale_x_date()` est pratique pour gérer les affichages des étiquettes des marques. ```r library(scales) p_2 + scale_x_date(breaks = date_breaks("10 year"), labels = date_format("%Y")) ``` <img src="graphiques_files/figure-html/unnamed-chunk-47-1.png" style="display: block; margin: auto;" /> --- #### Les fonctions d'échelles - `ggplot2` essaie de combiner les légendes autant que possible ; - Par exemple, deux esthétiques de couleur et de forme concernant une même variable seront regroupés pour la légende, au lieu d'avoir deux légendes ; - Si on modifie une légende, pour que l'autre le soit aussi, il faut impérativement conserver le même nom ! ```r (p <- ggplot(data = films_reduit, aes(x = estimated_budget, y = gross_revenue, colour = country_abr, size = country_abr)) + geom_point()) ``` ``` ## Warning: Using size for a discrete variable is not advised. ``` <img src="graphiques_files/figure-html/unnamed-chunk-48-1.png" style="display: block; margin: auto;" /> --- #### Les fonctions d'échelles - Dans cet exemple, si on change le nom de l'échelle concernant la couleur, sans modifier celle de la taille : deux légendes aparaissent. ```r p + scale_colour_discrete(name = "Country") ``` ``` ## Warning: Using size for a discrete variable is not advised. ``` <img src="graphiques_files/figure-html/unnamed-chunk-49-1.png" style="display: block; margin: auto;" /> --- #### Les fonctions d'échelles - On peut rétablir une seule échelle en donnant le même nom aux échelles. ```r p + scale_colour_discrete(name = "Country") + scale_size_discrete(name = "Country") ``` ``` ## Warning: Using size for a discrete variable is not advised. ``` <img src="graphiques_files/figure-html/unnamed-chunk-50-1.png" style="display: block; margin: auto;" /> --- class: exo # Exercices 1. Afficher un nuage de points de la masse des diamants (`carat`) en fonction du prix associé (`price`) ; 2. Reprendre ce graphique et faire dépende la couleur des points de la qualité de la coupe (`cut`) ; 3. Changer le nom de la légende en `"Qualité de la coupe"` ; 4. Indiquer la traduction française dans la légende, plutôt que le terme anglais ; 5. Changer les couleurs par défaut des points pour 5 couleurs de votre choix. --- class: titre_2, center, middle ## 2.5. Groupes --- #### Groupes - `ggplot2` effectue des regroupements automatiquement dans de nombreux cas ; - C'est le cas quand un argument esthétique de couleur ou de remplissage est basé sur une variable facteur ; - Les groupes s'effectuent en fonction des interactions des variables qualitatives d'un graphique ; - On peut vouloir définir soi-même les groupes, _via_> l'argument `group`. ```r df <- tibble(year = rep(1949:1960, each = 12), month = rep(1:12, 12), passengers = c(AirPassengers)) ``` --- #### Groupes ```r df ``` ``` ## # A tibble: 144 x 3 ## year month passengers ## <int> <int> <dbl> ## 1 1949 1 112 ## 2 1949 2 118 ## 3 1949 3 132 ## 4 1949 4 129 ## 5 1949 5 121 ## 6 1949 6 135 ## 7 1949 7 148 ## 8 1949 8 148 ## 9 1949 9 136 ## 10 1949 10 119 ## # … with 134 more rows ``` --- #### Groupes - Sans préciser de groupes : ```r ggplot(data = df, aes(x = month, y = passengers)) + geom_line() ``` <img src="graphiques_files/figure-html/unnamed-chunk-54-1.png" style="display: block; margin: auto;" /> --- #### Groupes En précisant que l'on souhaite regrouper par années ```r ggplot(data = df, aes(x = month, y = passengers, group = year)) + geom_line() ``` <img src="graphiques_files/figure-html/unnamed-chunk-55-1.png" style="display: block; margin: auto;" /> --- class: titre_2, center, middle ## 2.6. Annotations --- #### Annotations - Il est possible d'ajouter du texte ou des objets géométrique sur un graphique ; - Les exemples qui suivent s'appuient sur le graphique suivant : ```r p <- ggplot(data = films_reduit, aes(x = estimated_budget, y = gross_revenue)) + geom_point() p ``` <img src="graphiques_files/figure-html/unnamed-chunk-57-1.png" style="display: block; margin: auto;" /> --- #### Annotations : ajout de texte - Pour ajouter du texte : `geom_text()` ou `annotate()` ; - Résultats plus performants avec `annotate()` ; - Les données fournies à `annotate()` ne sont pas héritées ; - Chaque annotation est une couche ; - L'argument `geom` doit prendre la valeur `"texte"` ; - Les arguments `x` et `y` indiquent la (les) position(s) (x,y) du centre du texte ; - L'argument `legend` doit recevoir un vecteur de caractères ; - L'argument `colour` permet de changer la couleur, noire par défaut. --- #### Annotations : ajout de texte - Une annoation basique : ```r p + annotate("text", x = 1e8, y = 2e9, label = "Du texte") ``` <img src="graphiques_files/figure-html/unnamed-chunk-58-1.png" style="display: block; margin: auto;" /> --- #### Annotations : ajout de texte - Avec deux textes, le premier en rouge, et l'autre en bleu : ```r p + annotate("text", x = c(1e8, 2e8), y = 2e9, label = c("Du texte", "Un autre texte"), colour = c("red", "blue")) ``` <img src="graphiques_files/figure-html/unnamed-chunk-59-1.png" style="display: block; margin: auto;" /> --- #### Annotations : ajout de texte - Pour ajouter des expression mathématiques : `parse = TRUE` : * lettres grecques : écrire leur nom en entier, * écrire en indice : `[texte]`, * écrire en exposant : `^texte`, * indice et exposant pour un terme : d'abord en indice, puis en exposant. ```r p + annotate("text", x = 1e8, y = 2e9, label = "sqrt(1-alpha) + beta[i+1]^n", parse = TRUE) ``` <img src="graphiques_files/figure-html/unnamed-chunk-60-1.png" style="display: block; margin: auto;" /> --- #### Annotations : ajout de lignes - Quatre fonctions pour ajouter des lignes sur un graphique, en plus de `geom_line()` et `geom_path()` : * `geom_vline()` : ligne verticale ; * `geom_hline()` : ligne horizontale ; * `geom_abline()` : ligne spécifiée par sa pente et son ordonnée à l’origine ; * `geom_segment()` : segment (ou flèche en utilisant `arrow()`). --- #### Annotations : ajout de lignes - Ligne verticale : ```r p + geom_vline(xintercept = seq(0, 3e8, by = 1e8), size = 1, col = "dodger blue") ``` <img src="graphiques_files/figure-html/unnamed-chunk-61-1.png" style="display: block; margin: auto;" /> --- #### Annotations : ajout de lignes - Ligne horizontale : ```r p + geom_hline(yintercept = seq(0, 2e9, by = 1e9), col = "gold", linetype = "longdash") ``` <img src="graphiques_files/figure-html/unnamed-chunk-62-1.png" style="display: block; margin: auto;" /> --- #### Annotations : ajout de lignes - Droite : ```r p + geom_abline(intercept = 1e9, slope = -5) ``` <img src="graphiques_files/figure-html/unnamed-chunk-63-1.png" style="display: block; margin: auto;" /> --- #### Annotations : ajout de lignes - Segment : ```r p + geom_segment(aes(x = 0, xend = 1e8, y = 0, yend = 1e9), col = "blue") ``` <img src="graphiques_files/figure-html/unnamed-chunk-64-1.png" style="display: block; margin: auto;" /> --- #### Annotations : ajout de lignes - Pour les segments, on peut utiliser `annotate()` : ```r p + annotate(geom = "segment", x = 0, xend = 1e8, y = 0, yend = 1e9, col = "blue") ``` <img src="graphiques_files/figure-html/unnamed-chunk-65-1.png" style="display: block; margin: auto;" /> --- #### Annotations : ajout de lignes - Pour tracer une flèche : `arrow()` (<em>package</em> `grid`) : ```r library(grid) p + annotate(geom = "segment", x = 0, xend = 1e8, y = 0, yend = 1e9, col = "blue", arrow = arrow(length = unit(0.5, "cm"))) ``` <img src="graphiques_files/figure-html/unnamed-chunk-66-1.png" style="display: block; margin: auto;" /> --- #### Annotations : ajout de rectangles - L'ajout de rectangle peut se faire avec `geom_rect()` ou `annotate()` : ```r p + annotate(geom = "rect", xmin = 1e8, xmax = 2e8, ymin = -Inf, ymax = Inf, alpha = .3, fill = "red") + annotate(geom ="rect", xmin = 0, xmax = 5e8, ymin = 1e9, ymax = 2e9, alpha = .2, fill = "dodger blue") ``` <img src="graphiques_files/figure-html/unnamed-chunk-67-1.png" style="display: block; margin: auto;" /> --- class: exo # Exercices À partir du graphique suivant : ```r p <- ggplot() + geom_point(data = diamonds[sample(1:nrow(diamonds), 1000),], aes(x = carat, y = price, colour = cut)) ``` 1. Ajouter une ligne horizontale à `\(y = 10,000\)`, en pointillés gris ; 2. Ajouter le texte "Echantillon de taille 1000" à n'importe quel endroit du graphique. --- ## Positions - Pour modifier le positionnement de certains éléments des graphiques : | Fonction | Description | |----------|-------------| | `position_dodge` | évite les chevauchements, place les éléments côte à côte | | `position_fill` | empile les éléments qui se chevauchent, en normalisant pour avoir une hauteur égale | | `position_identity` | n’ajuste pas la position | | `position_jitter` | place les éméments côte à côte en essyant d’optimiser l’espace | | `position_stack` | empile les éléments qui se chevauchent | - On peut appeler ces fonctions _via_ l'argument `position` des fonctions `geom_*()`, en conservant uniquement le suffixe. --- ## Positions : exemples pour un histogramme - La base du graphique : ```r p <- ggplot(data = films_reduit, aes(x = runtime, fill = country_abr)) ``` --- ## Positions : exemples pour un histogramme - Dodge : ```r p + geom_bar(position = "dodge") ``` ``` ## Warning: position_dodge requires non-overlapping x intervals ``` <img src="graphiques_files/figure-html/unnamed-chunk-70-1.png" style="display: block; margin: auto;" /> --- ## Positions : exemples pour un histogramme - Fill : ```r p + geom_bar(position = "fill") ``` ``` ## Warning: position_stack requires non-overlapping x intervals ``` <img src="graphiques_files/figure-html/unnamed-chunk-71-1.png" style="display: block; margin: auto;" /> --- ## Positions : exemples pour un histogramme - Identity (pas pratique avec un barchart, cela peut cacher certaines barres) ```r p + geom_bar(position = "identity") ``` <img src="graphiques_files/figure-html/unnamed-chunk-72-1.png" style="display: block; margin: auto;" /> --- ## Positions : exemples pour un histogramme - Jitter : ```r p + geom_bar(position = "jitter") ``` <img src="graphiques_files/figure-html/unnamed-chunk-73-1.png" style="display: block; margin: auto;" /> --- ## Positions : exemples pour un histogramme - Stack : ```r p + geom_bar(position = "stack") ``` ``` ## Warning: position_stack requires non-overlapping x intervals ``` <img src="graphiques_files/figure-html/unnamed-chunk-74-1.png" style="display: block; margin: auto;" /> class: titre_2, center, middle ## 2.7. Positions --- #### Positions - Pour modifier le positionnement de certains éléments des graphiques : | Fonction | Description | |----------|-------------| | `position_dodge` | évite les chevauchements, place les éléments côte à côte | | `position_fill` | empile les éléments qui se chevauchent, en normalisant pour avoir une hauteur égale | | `position_identity` | n’ajuste pas la position | | `position_jitter` | place les éméments côte à côte en essyant d’optimiser l’espace | | `position_stack` | empile les éléments qui se chevauchent | - On peut appeler ces fonctions _via_ l'argument `position` des fonctions `geom_*()`, en conservant uniquement le suffixe. --- #### Positions : exemples pour un histogramme - La base du graphique : ```r p <- ggplot(data = films_reduit, aes(x = runtime, fill = country_abr)) ``` --- #### Positions : exemples pour un histogramme - Dodge : ```r p + geom_bar(position = "dodge") ``` ``` ## Warning: position_dodge requires non-overlapping x intervals ``` <img src="graphiques_files/figure-html/unnamed-chunk-77-1.png" style="display: block; margin: auto;" /> --- #### Positions : exemples pour un histogramme - Fill : ```r p + geom_bar(position = "fill") ``` ``` ## Warning: position_stack requires non-overlapping x intervals ``` <img src="graphiques_files/figure-html/unnamed-chunk-78-1.png" style="display: block; margin: auto;" /> --- #### Positions : exemples pour un histogramme - Identity (pas pratique avec un barchart, cela peut cacher certaines barres) ```r p + geom_bar(position = "identity") ``` <img src="graphiques_files/figure-html/unnamed-chunk-79-1.png" style="display: block; margin: auto;" /> --- #### Positions : exemples pour un histogramme - Jitter : ```r p + geom_bar(position = "jitter") ``` <img src="graphiques_files/figure-html/unnamed-chunk-80-1.png" style="display: block; margin: auto;" /> --- #### Positions : exemples pour un histogramme - Stack : ```r p + geom_bar(position = "stack") ``` ``` ## Warning: position_stack requires non-overlapping x intervals ``` <img src="graphiques_files/figure-html/unnamed-chunk-81-1.png" style="display: block; margin: auto;" /> --- class: titre_2, center, middle ## 2.8. Facettes --- #### Facettes - Produire des graphiques de même types pour différentes sous-divisions du tableau de données ; - Les aligner sur une grille ; - Deux fonctions : * `facet_grid()` : grille 2d, variables définissant lignes et colonnes, * `facet_wrap()` : graphiques pour chaque sous-division, mis bout-à-bout dans une matrice 2x2. - Deux arguments principaux : * les variables servant au _faceting_, * un logique pour indiquer si les échelles doivent être locales ou globales. --- #### Facettes - Il nous faut une autre variable indicatrice (sans trop de modalités), pour les exemples. ```r films_reduit$old <- ifelse(films_reduit$year <= 2000, "ancien", "nouveau") ``` --- #### Facettes : `facet_grid()` - Création d'une grille ; - Colonnes pour les valeurs d'un facteur ; - Lignes pour les valeurs d'un autre facteur ; - L'argument principal est `facets` : | Valeur | Effet | |--------|-------| | `. ~ .` (par défaut) | pas de <em>faceting</em> | | `. ~ variable_colonne` | une ligne, autant de colonnes que de valeurs pour `variable_colonne` | | `variable_ligne ~ .` | autant de lignes que de valeurs possibles pour `variable_ligne` | | `variable_ligne ~ variable_colonne` | autant de lignes que de valeurs possibles pour `variable_ligne`, autant de colonnes que de valeurs possibles pour `variable_colonne` | --- #### Facettes : `facet_grid()` ```r p <- ggplot(data = films_reduit, aes(x = estimated_budget, y = gross_revenue, colour = country, size = runtime)) + geom_point() ``` --- #### Facettes : `facet_grid()` - Avec une colonne pour chaque pays : ```r p + facet_grid(. ~ country) ``` <img src="graphiques_files/figure-html/unnamed-chunk-85-1.png" style="display: block; margin: auto;" /> --- #### Facettes : `facet_grid()` - Avec en ligne la récence du film, et en colonne le pays : ```r p + facet_grid(old ~ country) ``` <img src="graphiques_files/figure-html/unnamed-chunk-86-1.png" style="display: block; margin: auto;" /> --- #### Facettes : `facet_grid()` - Si on désire également afficher les situations marginales : `margins = TRUE` ; ```r p + facet_grid(old ~ country, margins = TRUE) ``` <img src="graphiques_files/figure-html/unnamed-chunk-87-1.png" style="display: block; margin: auto;" /> --- #### Facettes : `facet_grid()` - Les situations marginales pour une seule variable : donner son nom à `margins`. ```r p + facet_grid(old ~ country, margins = "country") ``` <img src="graphiques_files/figure-html/unnamed-chunk-88-1.png" style="display: block; margin: auto;" /> --- #### Facettes : `facet_wrap()` - Même type de graphique appliqué à des sous-échantillons de la base, selon un ou des facteurs ; - Graphiques ensuite placés sur une grille, les uns à la suite des autres. - À nouveau, l'argument principal est `facets` ; - La syntaxe est la suivante : `~ variable_1 + variable_2 ... + variable_n` ; - La grille finale sera ce qui se rapproche au mieux d'un carré ; - Une préférence pour les grilles larges plutôt que longue transparaît (taille des écrans...) --- #### Facettes : `facet_wrap()` - Avec une seule variable : ```r p + facet_wrap(facets = ~ country) ``` <img src="graphiques_files/figure-html/unnamed-chunk-89-1.png" style="display: block; margin: auto;" /> --- #### Facettes : `facet_wrap()` - Avec une seule variable : ```r p + facet_wrap(facets = ~ country + old) ``` <img src="graphiques_files/figure-html/unnamed-chunk-90-1.png" style="display: block; margin: auto;" /> --- #### Facettes : échelles - Les échelles des axes peuvent être identiques pour tous les graphiques de la grille - Ou bien être propres à chaque graphique ; - Il faut renseigner l'argument `scales`. | Valeur | Effet | |--------|-------| | `fixed` | échelles fixes, identiques pour chaque graphique | | `free` | échelles libres, pouvant varier en fonction de chaque graphique | | `free_x` | seule l'échele pour les `x` peut varier, l'échelle pour les `y` est fixe | | `free_y` | seule l'échelle pour les `y` peut varier, l'échelle pour les `x` est fixe | --- #### Facettes : échelles ```r p_m <- ggplot(data = films_reduit, aes(estimated_budget/1000000, gross_revenue/1000000, colour = country, size = runtime)) + geom_point() ``` --- #### Facettes : échelles - Toutes les échelles identiques ```r p_m + facet_wrap( ~ country, scales = "fixed") ``` <img src="graphiques_files/figure-html/unnamed-chunk-92-1.png" style="display: block; margin: auto;" /> --- #### Facettes : échelles - Échelles variant pour chaque graphique de la grille ```r p_m + facet_wrap( ~ country, scales = "free_y") ``` <img src="graphiques_files/figure-html/unnamed-chunk-93-1.png" style="display: block; margin: auto;" /> --- class: titre_2, center, middle ## 2.9. Coordonnées --- #### Coordonnées - Le système de coordonnées par défaut utilisé par `ggpplot2` est le système cartésien ; - Pour en changer, on peut utiliser : * `coord_cartesian()` : coordonnées cartésiennes, * `coord_fixed()` : coordonnées cartésiennes avec la même échelle pour les deux axes, * `coord_flip()` : coordonnées cartésiennes avec les axes renversés, * `coord_map()` : projections pour les cartes, * `coord_polar()` : coordonnées polaires, * `coord_trans()` : coordonnées cartésiennes transformées. --- #### Coordonnées - Graphique de référence : ```r (p <- ggplot(data = films, aes(x = estimated_budget/1e6, y = gross_revenue/1e6)) + geom_point()) ``` <img src="graphiques_files/figure-html/unnamed-chunk-95-1.png" style="display: block; margin: auto;" /> --- #### Coordonnées - En renversant les axes : ```r p + coord_flip() ``` <img src="graphiques_files/figure-html/unnamed-chunk-96-1.png" style="display: block; margin: auto;" /> --- #### Coordonnées - En appliquant une transformation : ```r p + coord_trans(x = "log10", y = "log10") ``` <img src="graphiques_files/figure-html/unnamed-chunk-97-1.png" style="display: block; margin: auto;" /> --- #### Coordonnées - Quand on veut appliquer la fonction log aux coordonnées, il est préférable d'utiliser la fonction `scale_x_log10()` ; - En effet, la transformation a lieu <b class=coul_1>avant</b> de calculer les positions des grilles. ```r p + scale_x_log10() ``` <img src="graphiques_files/figure-html/unnamed-chunk-98-1.png" style="display: block; margin: auto;" /> --- class: titre_2, center, middle ## 2.10. Titres, axes, légendes --- #### Titre - Le titre d'un graphique s'ajoute à l'aide de la fonction `ggtitle()` : ```r ggplot(data = films, aes(x = estimated_budget/1e6, y = gross_revenue/1e6)) + geom_point() + ggtitle("Titre") ``` <img src="graphiques_files/figure-html/unnamed-chunk-100-1.png" style="display: block; margin: auto;" /> --- #### Labels des axes - Les étiquettes des axes se modifient à l'aide `xlab()` et `ylab()` : ```r ggplot(data = films, aes(x = estimated_budget/1e6, y = gross_revenue/1e6)) + geom_point() + ggtitle("Titre") + xlab("Étiquette axe des x") + ylab("Étiquette axe des y") ``` <img src="graphiques_files/figure-html/unnamed-chunk-101-1.png" style="display: block; margin: auto;" /> --- #### Labels des axes - La fonction `labs()` est également très pratique pour modifier le titre et les étiquettes des axes ```r ggplot(data = films, aes(x = estimated_budget/1e6, y = gross_revenue/1e6)) + geom_point() + labs(x = "Étiquette axe des x", y = "Étiquette axe des y", title = "Titre") ``` <img src="graphiques_files/figure-html/unnamed-chunk-102-1.png" style="display: block; margin: auto;" /> --- #### Axes - Pour définir manuellement les limites des axes, on peut utiliser les fonctions `xlim()` et `ylim()` ; - Mais les valeurs à afficher n'appartenant pas aux intervalles sont jetées ; - Si on ne désire pas jeter les valeurs (dans le cas d'un "zoom" par exemple) : * utiliser la fonction `coord_cartesian()`, * renseigner les intervalles de définition aux arguments `xlim` et `ylim`. ```r df <- tibble(x = c(0, 0, 5, 5, 0, 0, 10, 10), y = c(0,5, 5, 0, 10, 15, 15, 10), g = factor(rep(1:2, each = 4))) ``` --- #### Axes - Le graphique original : ```r (p_2 <- ggplot(data = df, aes(x = x, y = y, group = g, fill = g)) + geom_polygon()) ``` <img src="graphiques_files/figure-html/unnamed-chunk-104-1.png" style="display: block; margin: auto;" /> --- #### Axes - En jouant avec la limite des x avec la fonction xlim() ```r p_2 + xlim(0, 7) ``` <img src="graphiques_files/figure-html/unnamed-chunk-105-1.png" style="display: block; margin: auto;" /> --- #### Axes - Avec la fonction coord_cartesian() ```r p_2 + coord_cartesian(xlim = c(0,7)) ``` <img src="graphiques_files/figure-html/unnamed-chunk-106-1.png" style="display: block; margin: auto;" /> --- class: exo # Exercices À partir du graphique suivant : ```r p <- ggplot() + geom_point(data = diamonds[sample(1:nrow(diamonds), 1000),], aes(x = carat, y = price, colour = cut)) ``` 1. Ajouter un titre cohérent ; 2. Changer les étiquettes des axes pour y mettre des étiquettes en français. --- #### Aspect général - Le changement des autres arguments est moins évident ; - Il faut passer par la fonction `theme()` ; - https://ggplot2.tidyverse.org/reference/index.html ; - Quatre types de fonctions : * `element_text()` : pour toutes les étiquettes, ce qui est au format texte, * `element_line()` : pour toutes les lignes tracées, * `element_rect()` : pour les backgrounds et les cadres, * `element_blank()` permet de ne rien dessiner. --- #### Aspect général : `element_text()` | Argument | Valeur | |-----------|--------| | `family` | la famille de la fonte | | `face` | graisse ("plain", "italic", "bold", "bold.italic") | | `colour` | couleur | | `size` | taille en pts | | `hjust` | justification horizontale, dans [0, 1] | | `vjust` | justification verticale, dans [0, 1] | | `angle` | angle, dans [0, 360] | | `lineheight` | hauteur de ligne (pour l’espacement entre les lignes) | --- #### Aspect général : `element_line()` | Argument | Valeur | |-----------|--------| | `colour` | la couleur de ligne | | `size` | la taille | | `linetype` | le type de ligne ("blank", "solid", "dashed", "dotted", "dotdash", "longdash", "twodash) | | `lineend` | le type de fin de ligne ("round", "butt" ou "square") | --- #### Aspect général : `element_rect()` | Argument | Valeur | |-----------|--------| | `fill` | la couleur de remplissage | | `colour` | la couleur de la bordure | | `size` | la taille de la bordure | | `linetype` | le type de ligne ("blank", "solid", "dashed", "dotted", "dotdash", "longdash", "twodash) | --- #### Aspect général ```r library(grid) p <- ggplot(data = films_reduit, aes(x = estimated_budget/1e6, y = gross_revenue/1e6, colour = country_abr)) + # Tracer des points geom_point() + # Ajout d'un titre ggtitle("Titre\nsur deux lignes") + # Changement des étiquettes pour les axes xlab("Étiquette axe des x") + ylab("Étiquette axe des y") + # Changement du titre de la légende scale_colour_discrete(name = "Country") ``` --- #### Aspect général - Le graphique utilisant le thème par défaut : ```r p ``` <img src="graphiques_files/figure-html/unnamed-chunk-109-1.png" style="display: block; margin: auto;" /> --- #### Aspect général - En changeant certains éléments ```r p_2 <- p + theme(plot.title = element_text(family = "Times", face = "bold", colour = "red", size = rel(2), hjust = 0, lineheight = 1.5), axis.title = element_text(face = "bold", colour = "orange"), axis.text.x = element_text(colour = "blue", angle = 45), axis.ticks = element_line(colour = "brown", size = rel(2)), legend.key = element_rect(fill = "dodger blue", colour = "red"), legend.background = element_rect(fill = "green", colour = "purple", linetype = "twodash"), panel.grid.minor = element_blank(), panel.grid.major = element_line(colour = "black") ) ``` --- #### Aspect général ```r p_2 ``` <img src="graphiques_files/figure-html/unnamed-chunk-111-1.png" style="display: block; margin: auto;" /> --- #### Aspect général - Pour éviter ce genre d'horreurs : des thèmes prédéfinis existent : * `theme_grey()` (thème par défaut), * `theme_bw()`, * `theme_linedraw()`, * `theme_light()`, * `theme_minimal()`, * `theme_classic()`. --- #### Aspect général ```r p + theme_bw() ``` <img src="graphiques_files/figure-html/unnamed-chunk-112-1.png" style="display: block; margin: auto;" /> --- #### Aspect général Un petit ajout pour afficher le titre du graphique tout à gauche, aligné avec les étiquettes de l’axe des ordonnées : ```r p + theme_bw() + theme(plot.title.position = "plot") ``` <img src="graphiques_files/figure-html/unnamed-chunk-113-1.png" style="display: block; margin: auto;" /> --- #### Pour aller plus loin : 1. La présentation filmée de William Chase intitulée "[The Glamour of Graphics](https://rstudio.com/resources/rstudioconf-2020/the-glamour-of-graphics/)", donnée le 30 janvier 2020 à la conférence RStudio ; 2. Un article intitulé "[An Economist's Guide to Visualizing Data](https://www.aeaweb.org/articles?id=10.1257/jep.28.1.209)", rédigé par Jonathan A. Schwabish et publié dans Journal of Economic Perspectives [@schwabish2014economist]. --- class: exo # Exercices À partir du graphique suivant : ```r p <- ggplot() + geom_point(data = diamonds[sample(1:nrow(diamonds), 1000),], aes(x = carat, y = price, colour = cut)) ``` 1. Mettre le fond de la zone de graphique en blanc ; 2. Changer la taille des étiquettes des axes ; 3. Changer la couleur des lignes secondaires de la grille de la zone de graphique. --- class: inverse, center, middle # 3. Enregistrement des graphiques <br/><br/><br/> <div style='text-align: center;'> <img src = "images/graphiques/sauvegarde.gif" width = "500px" title = "Sauvegarde - PhD Comics" /> <br/> <span class = "lien_source">Source : <a href = "http://www.phdcomics.com/comics/archive.php?comicid=814">PhD Comics : http://www.phdcomics.com/comics/archive.php?comicid=814</a></span> </div> --- #### Enregistrement des graphiques - Pour enregistrer un graphique réalisé avec `ggplot()` : `ggsave()`. | Argument | Valeur | |-----------|--------| | `filename` | nom du fichier, ou chemin et nom du fichier | | `plot` | graphique à sauvegarder (par défaut, le dernier graphique, en faisant appel à la fonction last_plot()) | | `device` | dispositif à utiliser (automatiquement extrait de l’extension du fichier indiqué à l'argument filename) | | `path` | chemin vers le fichier | | `scale` | facteur d’échelle | | `width` | largeur (par défaut, celle de la fenêtre de graphique actuelle) | | `height` | hauteur (par défaut, celle de la fenêtre de graphique actuelle) | | `units` | unité pour la largeur et la longueur ("in", "cm" ou "mm") | | `dpi` | nombre de points par pouce, uniquement pour les images matricielles | | `limitsize` | quand TRUE (la valeur par défaut), l’image sauvegardée ne dépassera pas les 50 × 50 in | --- #### Enregistrement des graphiques - `ggsave()` reconnaît automatiquement les extensions suivantes : * eps/ps, * tex, * pdf, * jpeg, * tiff, * png, * bmp, * svg, * wmf (uniquement pour Windows). --- #### Enregistrement des graphiques - Exemple : ```r p <- ggplot(data = films_reduit, aes(x = estimated_budget, y = gross_revenue, colour = country)) + geom_point() + xlab("Estimated budget") + ylab("Gross Revenue") + scale_colour_discrete(name = "Country") + ggtitle("A small sample of movies") ``` --- #### Enregistrement des graphiques - Enregistrement du dernier graphique affiché, aux dimensions de la fenêtre de graphiques ```r p ``` <img src="graphiques_files/figure-html/unnamed-chunk-117-1.png" style="display: block; margin: auto;" /> ```r ggsave("estim_bud.pdf") ``` --- #### Enregistrement des graphiques - En précisant plus d'arguments : ```r ggsave(p, file = "estim_bud.pdf", width = 15, height = 8, unit = "cm", scale = 2) ```