[ ["index.html", "Visualisation de données : éléments théoriques et applications avec R Prerequis Installer R Installer RStudio (facultatif) Installer les packages nécessaires", " Visualisation de données : éléments théoriques et applications avec R Antoine Neuraz 2019-11-18 Prerequis Pour les parties théoriques, aucun prérequis n’est nécessaire. Les exemples pratiques sont conçus avec le logiciel R et le package ggplot2 Installer R Vous devez avoir installé le logiciel R pour pouvoir suivre les exemples pratiques. Vous trouverez les liens de téléchargement ici : https://cran.r-project.org Installer RStudio (facultatif) Nous conseillons également d’installer l’interface de développement (IDE) RStudio qui vous facilitera les choses pour la prévisualisation des contenus et des rendus. Bien entendu, si vous avez déjà une IDE préférée, vous pouvez continuer à l’utiliser. Vous trouverez la RStudio Desktop en version open source (gratuite) ici : https://www.rstudio.com/products/rstudio/#Desktop Installer les packages nécessaires Dans ce cours, un certain nombre de packages sont utilisés très fréquement et doivent être installés : pkg_list_req = c("tidyverse", "ggplot2", "see", "igraph", "ggraph", "tidygraph", "rlang") for (pkg in pkg_list_req) { if (!(pkg %in% installed.packages())) install.packages(pkg) } Un certain nombre d’autres packages, utilisés plus ponctuellement vous seront indiqués dans les différents chapitres. Voici une liste exhaustive des packages utilisés dans ce cours : tidyverse, ggplot2, see, igraph, ggraph, tidygraph, rlang "], ["intro.html", "Chapitre 1 Intro 1.1 Définition 1.2 TODO", " Chapitre 1 Intro 1.1 Définition La visualisation est le processus qui transforme les données en représentation graphique interactive à des fins d’exploration, de confirmation ou de communication. 1.2 TODO "], ["types-de-datasets-et-types-de-données.html", "Chapitre 2 Types de datasets et types de données 2.1 Types de datasets 2.2 Types de données", " Chapitre 2 Types de datasets et types de données 2.1 Types de datasets 2.1.1 Données tabulaires 2.1.2 Réseaux ## Using `stress` as default layout 2.1.3 TODO: Champs ## Warning: `axis.ticks.margin` is deprecated. Please set `margin` property of ## `axis.text` instead 2.1.4 TODO: Spacial 2.2 Types de données 2.2.1 TODO "], ["perception-système-visuel-marques-et-canaux-couleurs.html", "Chapitre 3 Perception : système visuel, marques et canaux, couleurs 3.1 TODO 3.2 Types de marques 3.3 Mappings in ggplot 3.4 scales in ggplot", " Chapitre 3 Perception : système visuel, marques et canaux, couleurs 3.1 TODO 3.2 Types de marques Figure 3.1: Exemples d’encodage 3.3 Mappings in ggplot figure from https://serialmentor.com/dataviz/aesthetic-mapping.html 3.4 scales in ggplot figure from https://serialmentor.com/dataviz/aesthetic-mapping.html "], ["abstraction-de-tâche.html", "Chapitre 4 Abstraction de tâche 4.1 TODO", " Chapitre 4 Abstraction de tâche 4.1 TODO "], ["principes-de-design.html", "Chapitre 5 Principes de design 5.1 TODO", " Chapitre 5 Principes de design 5.1 TODO "], ["visualisation-de-données-tabulaires.html", "Chapitre 6 Visualisation de données tabulaires 6.1 TODO", " Chapitre 6 Visualisation de données tabulaires 6.1 TODO "], ["interaction.html", "Chapitre 7 Interaction 7.1 TODO", " Chapitre 7 Interaction 7.1 TODO "], ["visualisation-de-données-spatiales.html", "Chapitre 8 Visualisation de données spatiales 8.1 TODO", " Chapitre 8 Visualisation de données spatiales 8.1 TODO "], ["visualisation-de-réseaux-et-graphes.html", "Chapitre 9 Visualisation de réseaux et graphes", " Chapitre 9 Visualisation de réseaux et graphes ## Warning: Ignoring unknown parameters: fold "], ["visualisation-de-texte.html", "Chapitre 10 Visualisation de texte 10.1 TODO", " Chapitre 10 Visualisation de texte 10.1 TODO "], ["visualisation-de-texte-1.html", "Chapitre 11 Visualisation de texte 11.1 TODO", " Chapitre 11 Visualisation de texte 11.1 TODO "], ["ggplot2-techniques-avancées.html", "Chapitre 12 ggplot2 : techniques avancées 12.1 Créer son propre thème ggplot2 12.2 Utiliser ggplot2 dans des fonctions", " Chapitre 12 ggplot2 : techniques avancées 12.1 Créer son propre thème ggplot2 Les thèmes de ggplot2 permettent de contrôler l’apparence des plots. Il est possible de modifier un thème standard en utilisant la fonction theme(). Mais nous allons voir ici comment créer un thème personalisé. Il est bien entendu possible de créer un thème de toutes pièces. Pour cela, il faut définir un à un tous les éléments possibles du thème mais c’est très long et rébarbatif. Dans ggplot2, le seul thème défini de cette façon est le thème de base theme_grey() (voir le repo officiel). Les autres thèmes héritent les attribut de ce premier thème et modifient uniquement éléments nécéssaires. Par exemple, theme_bw() est construit à partir de theme_grey() et theme_minimal() se base sur theme_bw(). C’est beaucoup plus pratique de définir les thèmes de cette façon. 12.1.1 un thème est une fonction Un thème est une fonction R classique qui prend comme arguments 4 variables : - base_size : taille de base du texte (défaut = 11) - base_family : famille de polices de base (défaut = "") - base_line_size : taille de base des éléments line (défaut = base_size / 22 ) - base_rect_size : taille de base des éléments rect (défault = base_size / 22 ) my_theme <- function(base_size = 11, base_family = "", base_line_size = base_size / 22, base_rect_size = base_size / 22) {} 12.1.2 modifier un thème de base avec %+replace% Ensuite, nous allons choisir un thème de base duquel notre thème personalisé va hériter les éléments par défaut. En effet, tous les éléments que nous ne spécifieront pas seront basés sur le thème de base. Par exemple, nous pouvons choisir theme_minimal(). Pour modifier les éléments du thème de base, il faut utiliser l’opérateur %+replace% suivi de la fonction theme(). C’est dans cette dernière que nous pourrons spécifier les différents éléments à modifier par rapport au thème de base. my_theme <- function(base_size = 11, base_family = "", base_line_size = base_size / 22, base_rect_size = base_size / 22) { theme_minimal(base_size = base_size, base_family = base_family, base_line_size = base_line_size, base_rect_size = base_rect_size) %+replace% theme( # éléments à modifier ) } 12.1.3 définir de nouveaux attributs Nous pouvons a présent inserer dans la fonction thème les éléments à modifier. Notez qu’il ne faut pas utiliser de tailles absolues mais définir des tailles relatives avec la fonction rel(). my_theme() Voici un exemple de thème personnalisé (très fortement inspiré du thème theme_modern() du package see) basé sur theme_minimal() : my_theme <- function(base_size = 11, base_family = "", base_line_size = base_size / 22, base_rect_size = base_size / 22) { half_line <- base_size/2 theme_minimal(base_size = base_size, base_family = base_family, base_line_size = base_line_size, base_rect_size = base_rect_size) %+replace% theme( ## Panel grid ## panel.border = element_blank(), panel.grid.major = element_blank(), panel.grid.minor = element_blank(), ## Title ## plot.title = element_text(size = rel(1.3), face = "plain", margin = margin(0, 0, 20, 0)), ## Axis ## axis.line = element_line(colour = "black", size = rel(0.5)), axis.title.y = element_text(margin = margin(t = 0, r = rel(20), b = 0, l = 0), angle = 90), axis.title.x = element_text(margin = margin(t = rel(20), r = 0, b = 0, l = 0)), axis.title = element_text(size = rel(1.2), face = "plain"), axis.text = element_text(size = rel(.8)), axis.ticks = element_blank(), ## Legend ## legend.key = element_blank(), legend.position = "bottom", legend.text = element_text(size = rel(1.1)), legend.title = element_text(size = rel(1.1)), legend.spacing.x = unit(2, "pt"), ## Background ## strip.background = element_blank(), plot.tag = element_text(size = rel(1.3), face = "bold"), strip.text = element_text(face = "bold") ) } my_theme_dark() Et un thème sombre basé sur my_theme() et très fortement inspiré de theme_blackboard() du package see : my_theme_dark <-function(base_size = 11, base_family = "", base_line_size = base_size / 22, base_rect_size = base_size / 22) { dark_color = "#0d0d0d" light_color = "#E0E0E0" my_theme(base_size = base_size, base_family = base_family, base_line_size = base_line_size, base_rect_size = base_rect_size) %+replace% theme( ## Backgrounds ## plot.background = element_rect(fill = dark_color), panel.background = element_rect(fill = dark_color, color=dark_color), legend.background = element_rect(fill = dark_color, color=dark_color), ## Lines ## axis.line = element_line(color = light_color), ## Text ## text = element_text(family = base_family, face = "plain", color = light_color, size = base_size, hjust = 0.5, vjust = 0.5, angle = 0, lineheight =0.9, margin = margin(), debug = FALSE), axis.text = element_text(color = light_color) ) } 12.1.4 Exemple Créons un plot d’exemple à partir d’un jeu de données synthétique p <- generate_uniform_dataset( dataset_size = 100, min_x = 0, max_x = 1, outliers = 2, seed = 506 ) %>% ggplot(data = ., aes( x = x, y = y, color = group)) + geom_point(size = 3) + scale_color_material_d() + labs(x="legende axe x", y="legende axe y") p p + theme_minimal() + labs(title= "theme_minimal") p + my_theme() + labs(title= "my_theme") p + my_theme_dark() + labs(title= "my_theme_dark") 12.2 Utiliser ggplot2 dans des fonctions Pour utiliser les syntaxes décrites ici, vous aurez besoin de ggplot2 version >= 3.2. Prenons l’exemple d’une fonction qui réalise un bar chart (diagramme en barres) pour une colonne données (par exemple drv) d’un dataset (par exemple mpg, fourni avec ggplot2) Le code pour réaliser ce plot en dehors d’une fonction peut ressembler à ceci : ggplot(mpg) + geom_bar(aes(x = drv)) Dans une fonction, nous voudrions pouvoir utiliser un autre dataset et changer le nom de la variable d’intérêt. Modifier le nom du dataset ne pose pas de problème, et l’on peut utiliser une syntaxe classique : my_bar <- function(df) { ggplot(df) + geom_bar(aes(x = drv)) } my_bar(mpg) Pour rendre modifiable le nom de la colonne, c’est à dire une variable qui est déclarée dans la fonction aes(), c’est moins immédiat. L’exemple suivant ne fonctionnera pas : my_bar <- function(df, col) { ggplot(df) + geom_bar(aes(x = col)) } my_bar(mpg, drv) Erreur : Aesthetics must be valid data columns. Problematic aesthetic(s): x = var. Did you mistype the name of a data column or forget to add stat()? Pour résoudre ce problème, il faut utiliser une syntaxe particulière introduite dans la version 3.2 de ggplot2. Vous avez 2 solutions: - le nom de la colonne est passé en paramètre de la fonction comme un nom (c’est à dire sans "", par exemple drv), vous devez encadrer le nom de la colonne par des doubles accolades : {{ col }} my_bar <- function(df, col) { ggplot(df) + geom_bar(aes(x = {{ col }})) } my_bar(mpg, drv) le nom de la colonne est passé en paramètre de la fonction comme une chaine de caractère (par exemple: "drv"), vous devez utiliser la syntaxe suivante: .data[[ col ]] my_bar <- function(df, col) { ggplot(df) + geom_bar(aes(x = .data[[ col ]] )) } my_bar(mpg, "drv") "], ["references.html", "References", " References "] ]