Dans cette seconde partie de la section dédiée à la visualisation de données vous allez apprendre à:
Changer l’apparence des graphiques
Combiner plusieurs graphiques dans une même figure
Inclure du dynamisme et de l’interactivité à vos graphique
Apprendre les meilleures pratiques pour visualiser des données
Avant de rentrer dans le vif du sujet il nous faut mettre en place notre environnement de travail. Créez un nouveau script R et:
library(tidyverse)
session3_plots_manipulation
:setwd("~/Desktop/2021_L3_R/session3_plots_manipulation/")
expt1 <- read_tsv("../data/burghardt_et_al_2015_expt1.txt")
##
## ── Column specification ────────────────────────────────────────────────────────
## cols(
## plant_nb = col_double(),
## genotype = col_character(),
## background = col_character(),
## temperature = col_double(),
## fluctuation = col_character(),
## day.length = col_double(),
## vernalization = col_character(),
## survival.bolt = col_character(),
## bolt = col_character(),
## days.to.bolt = col_double(),
## days.to.flower = col_double(),
## rosette.leaf.num = col_double(),
## cauline.leaf.num = col_double(),
## blade.length.mm = col_double(),
## total.leaf.length.mm = col_double()
## )
Nous sommes maintenant prêt!
Tous les éléments d’un ggplot sont modifiables. Les thèmes permettent de modifier l’apparence du graphique. Voici quelques exemples.
# Example de thèmes existants dans ggplot2
ggplot(expt1, aes(genotype, days.to.flower)) +
geom_boxplot() +
theme_bw() +
labs(title = "Black and white theme")
ggplot(expt1, aes(genotype, days.to.flower)) +
geom_boxplot() +
theme_classic() +
labs(title = "Classic theme")
ggplot(expt1, aes(genotype, days.to.flower)) +
geom_boxplot() +
theme_minimal() +
labs(title = "Minimal theme")
La fonction theme()
peut être utilisée pour modifier des éléments en particulier du graphique. Il y a tellement de possibilités que le mieux est de rechercher sur internet la modification que vous voulez faire.
Par exemple, en recherchant “vertical labels x axis ggplot2” nous obtenons cette solution:
ggplot(expt1, aes(genotype, days.to.flower)) +
geom_boxplot() +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
Rechercher “altering plot colours ggplot2” donne ceci, qui apporte cette solution:
ggplot(expt1, aes(genotype, days.to.flower, fill = fluctuation)) +
geom_boxplot() +
scale_fill_brewer(palette="Dark2")
Parfois nous voulons crée une figure contenant plusieurs graphiques, c’est le cas dans la plupart des articles scientifiques.
Par exemple le graphique que vous avez reproduit hier correspond aux panels B et C d’une figure de Burghard et al 2015
Nous allons faire quelque chose de similaire avec un scatterplot en panel A, et des boxplots en panel B.
Pour cela nous allons utiliser la fonction ggarrange()
qui est dans le package ggpubr
.
Tout d’abord, nous devons charger cette librairie dans R:
library(ggpubr)
Ensuite, faisons chaque graphique indépendamment et sauvons les dans un objet:
panelA <- ggplot(expt1, aes(rosette.leaf.num, days.to.bolt, colour = fluctuation)) +
geom_point()
panelB <- ggplot(expt1, aes(genotype, days.to.bolt, fill = fluctuation)) +
geom_boxplot() +
facet_grid(. ~ temperature) +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
Nous pouvons maintenant utiliser la fonction grid.arrange()
pour combiner les graphiques ensemble:
ggarrange(panelA, panelB, nrow=2, labels =c("A", "B"),heights = c(1.5, 2))
Si nous postons les graphiques en ligne, cela peut apporter un plus d’inclure une animation dans le graphique, à condition que cela apporte des informations supplémentaires. C’est possible avec le package gganimate
!
Tout d’abord, chargeons le package gganimate
:
library(gganimate)
Pour créer une animation, il faut utiliser la fonction transition_states()
à notre graphique (avec un +)
ggplot(expt1, aes(rosette.leaf.num, days.to.bolt, colour = fluctuation)) +
geom_point() +
transition_states(states = genotype, wrap = FALSE, transition_length = 1, state_length = 3) +
ease_aes('linear') +
labs(subtitle = "{closest_state}")
L’animation peut ensuite être sauvée en utilisant la fonction anim_save()
Pour aller plus loin, il est même possible de créer des graphiques interactifs en utilisant le package plotly
.
library(plotly)
Il faut d’abord mettre le graphique dans un objet, puis utiliser cet objet dans la fonction ggplotly()
.
# Mettre le graphique dans l'objet p1
p1 <- ggplot(expt1, aes(rosette.leaf.num, days.to.bolt, colour = fluctuation)) +
geom_point() +
facet_wrap(~genotype)
# Utiliser la fonction ggplotly pour faire un graphique intéractif
ggplotly(p1)
Plutôt que d’avoir un graphique par génotype, il est possible d’ajouter un curseur pour montrer les données des génotypes de manière interaction en utilisant l’argument ‘frame’:
# Mettre le graphique dans l'objet p1
p2 <- ggplot(expt1, aes(rosette.leaf.num, days.to.bolt, colour = fluctuation, frame=genotype)) +
geom_point()
# Utiliser la fonction ggplotly pour faire un graphique intéractif
ggplotly(p2)
Utiliser le graphique approprié à nos données et répondant à notre question est essentiel. Cependant cela n’est pas toujours intuitif et dépend:
-Du nombre de variable à représenter. Voulez vous montrer une seule variable ou plusieurs? Et s’il y en a deux, voulez vous les comparer directement (dans le cas de nombres)
Comme il existe de nombreuses options, utilisez ce guide avec un arbre de décision pour choisir la meilleure méthode de visualisation
Discussion de groupe
Discutez avec votre voisin des deux types de graphique suivant.
Les avez vous déjà utilisés? Si oui, pour représenter quel type de données?
Sont ils appropriés à vos données et à votre question? Si non, quel autre type de graphique utiliseriez vous maintenant que vous savez utiliser ggplot?
1. Le camembert (pie chart)
Aidez vous de cette figure comparant des camemberts et des barplots montrant les mêmes données
2. Le barplot avec des barres d’erreur
Les barplots avec barre d’erreur permettent de représenter la moyenne d’une population (barplot) ainsi que la dispersion des données (barre d’erreur).
Mais est-ce idéal pour montrer nos données? Discutez en avec votre voisin en vous aidant de la figure ci-dessous extraite de Weissgerber et al., 2015.
De manière générale il est recommandé d’être au plus près des données quand nous réalisons des graphiques.
Choisissez de présenter toutes vos données, sans les modifier ou en supprimer une partie (si vous le faites, vous devez expliquer ce que vous avez fait et pourquoi).
Idéalement, et si cela se prête à votre question, montrez les données plutôt que des résumés. Choisissez des nuages de points plutôt que des barplots avec des barres d’erreur.
Toujours indiquer la taille des effectifs, soit en l’écrivant dans le graphique, soit en le rendant visible (nuage de point, densité etc)
Pour aller plus loin, nous allons regarder de plus prêt deux cas en particulier:
Pour rappel, le boxplot permet de montrer un bon résumé des données:
Cependant, faire un résumé des données peut cacher des informations:
Des alternatives existent pour représenter les données, afin d’éviter ces problèmes:
Si vous avez des données numériques avec des valeurs très éloignées de zéro il peut être tentant de ne pas faire commencer l’axe y à zéro mais plus proche de vos valeurs. Attention, cela peut cependant changer la conclusion!
Voici un exemple avec deux graphiques, l’un avec l’axe des y commençant à zéro et l’autre non. Le deuxième peut donner l’impression qu’il y a une grande différence entre les deux groupes, même si ce n’est pas forcement le cas.
De manière générale:
Si vous utilisez des barplots ou des points avec différentes catégories à comparer, faites commencer l’axe y à zéro.
Si vous utilisez des lignes (comme dans le cas de séries chronologiques), il n’est pas nécessaire de faire commencer l’axe des y à zéro. En effet ce type de graphique permet de montrer l’évolution d’une observation par exemple au cours du temps. Alors que les barplots sont utilisés pour montrer la différence entre deux (ou plusieurs) groupes
Si vous avez des données numériques avec certains points très éloignés des autres il peut être tentant de couper l’axe y entre les groupes de points. Ne le faites jamais!! Il existe d’autres alternatives comme par exemple utiliser une échelle logarithmique.
Comment bien faire ressortir le message des graphiques
Maintenant que nous avons vu les erreurs à éviter quand nous créons des graphique, passons aux méthodes permettant de bien faire ressortir le message des graphiques. Cela permettra de faciliter l’interprétation des graphique.
De manière générale, évitez de faire des graphiques trop compliqués avec des fioritures. Évitez la 3D, les axes doubles et les lignes de grille. Concentrez vous sur l’essentiel!
Voyons trois méthodes plus en détail:
1. Ordonnez les données
Par défaut, R va ordonner les catégories de vos variable par ordre alphabétique. Sur excel, l’ordre des variable dans le tableau est utilisé. Cependant cet ordre n’est pas toujours optimal.
Vous pouvez changer l’ordre des catégories de vos variables sur R (nous verrons comment en séance 5). Voici quelques conseils pour bien choisir l’ordre dans lequel représenter les données.
Si vous comparez des données pour un (ou des) mutant à un wild type, ou si vous comparez un (ou plusieurs) traitement à un contrôle, commencez toujours par la référence, c.a.d le wild type ou le contrôle.
S’il n’y a pas de référence (wild type ou contrôle) et que vous voulez comparer différents conditions, dans ce cas ordonnez vos catégories en fonction de leur valeur, par exemple du plus grand au plus petit. Cela permettra facilement d’identifier les catégories avec les valeurs les plus grandes ou plus petites, ou les catégories avec des valeurs similaires. Voici un exemple d’un graphique avec des catégories non ordonnées, puis avec des catégories ordonnées. La version avec les catégories ordonnées est beaucoup plus facile à interpréter.
source des images
2. Évitez de mettre trop d’information dans vos graphiques
Il est tentant de vouloir faire rentrer toutes vos données dans un même graphique, surtout qu’avec R vous pouvez jouer avec les couleurs, les formes et la taille des points. Mais pour que le message ressorte bien, il vaut mieux présenter moins de données et se concentrer sur un message par graphique.
Pour éviter ce problème, vous pouvez faire un graphique par ligne, ou mettre en valeur une ligne en particulier.
source des images
Pour inclure l’information de la densité en points vous pouvez utiliser la transparence des points, ou montrer la densité en 2D ou 3D
Graphique avec trop de points cachant la densité
Graphique avec une densité 2D
Graphique avec une densité 3D
source des images
3. Bien utiliser les couleurs
Un avantage de ggplot est qu’il offre une large palette de couleur. Il existe d’ailleurs la libraire
RColorBrewer
qui contient de nombreuses palettes prédéfinies qui vous aideront beaucoup.Voici toutes les palettes de couleur de
RColorBrewer
Surtout vous pouvez facilement y sélectionner les palettes de couleurs qui sont aussi visibles pour les daltoniens avec la commande:
Maintenant que nous avons accès à toutes ces couleurs, encore faut-il bien les utiliser.
Voici quelques conseils pour que la couleur dans les graphiques soit votre alliée et non l’inverse.
N’utilisez des couleurs que si cela est nécessaire au graphique et ajoute des informations. Sinon cela va juste créer une distraction et compliquer le graphique. Vous pouvez utiliser des couleurs pour représenter différents groupes, montrer un gradient ou insister sur certains points. De même ne colorez pas le fond des graphiques.
N’utilisez pas plus de 7 couleurs dans un graphique, sinon cela va créer de la confusion. Dans ce cas, choisissez un autre type de graphique qui permet de réduire le nombre de couleurs utilisées.
Si vous avez plusieurs graphiques qui contiennent les même variables, soyez cohérent et utilisez toujours les même couleurs pour ces variables.
Assurez vous d’avoir une légende qui indique à quoi correspondent les couleurs et mettez la au même endroit pour tous vos graphiques.
Si vous avez des données moins importantes dans un graphique, colorez les en gris et n’utilisez de la couleur pour les données que vous voulez faire ressortir.
Assurez vous qu’il y a assez de contraste entre vos couleurs dans un graphique. Et aussi entre le texte et le fond pour que le texte soit bien lisible.
Certaines couleurs sont associées à des idées dans notre culture. Par exemple le rouge pour non ou mauvais et le vert pour oui ou bon. Allez dans ce sens pour rendre vos graphiques plus faciles à lire.
Si vous utilisez un gradient, associez les couleurs claires aux faibles valeurs et les couleurs foncées aux valeurs élevées. Par contre n’utilisez pas de gradients de couleurs pour des catégories, gardez les pour des valeurs numériques.
Vous pouvez trouver des exemples de chaque cas et quelques points supplémentaires ici