class: title-slide, middle <style type="text/css"> .title-slide { background-image: url('../assets/img/bg.jpg'); background-color: #23373B; background-size: contain; border: 0px; background-position: 600px 0; line-height: 1; } </style> <div class="lab-logo"></div> # Bloc 3 <hr width="65%" align="left" size="0.3" color="orange"></hr> ## La visualisation des données <hr width="65%" align="left" size="0.3" color="orange" style="margin-bottom:40px;" alt="@Martin Sanchez"></hr> .instructors[ **BIO500** - Victor Cameron ] --- # Bloc 3 - Les notions sont abordés dans les chapitres [10](https://econumuds.github.io/BIO500/figures.html) et [11](https://econumuds.github.io/BIO500/composantes_graphiques.html) du livre. - Un guide des fonctionalités de R pour la visualisation des données vous est accessible [ici](https://github.com/EcoNumUdS/BIO500/blob/master/references/graphsonr.pdf). - Vous trouverez du matériel supplémentaire dans le [cours](https://r.qcbs.ca/workshop03/book-fr/index.html) du [CSBQ](https://qcbs.ca/). --- class: inverse, center, middle # Pourquoi la visualisation de données est importante ? <hr width="65%" size="0.3" color="orange" style="margin-top:-20px;"></hr> --- # La visualisation de données .center[<blockquote class="twitter-tweet"><p lang="en" dir="ltr" href="https://twitter.com/hashtag/rstats?src=hash&ref_src=twsrc%5Etfw">#rstats</a> <a href="https://twitter.com/hashtag/tidyverse?src=hash&ref_src=twsrc%5Etfw">#tidyverse</a> <a href="https://twitter.com/hashtag/datajournalism?src=hash&ref_src=twsrc%5Etfw">#datajournalism</a> <a href="https://twitter.com/hashtag/dataviz?src=hash&ref_src=twsrc%5Etfw">#dataviz</a> <a href="https://twitter.com/hashtag/Penguins?src=hash&ref_src=twsrc%5Etfw">#Penguins</a> <a href="https://t.co/u2rXkBehxS">pic.twitter.com/u2rXkBehxS</a></p>— Laura Navarro (@LauraNavarroSol) <a href="https://twitter.com/LauraNavarroSol/status/1289216490307063814?ref_src=twsrc%5Etfw">July 31, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>] --- # La visualisation de données Les données sont essentielles pour supporter ses arguments et convaincre un auditoire. Toutefois, les données brutes endorment les auditeurs, ou pire, les font fuir. ## La visualisation de données permet de présenter les données de manière plus attrayante et plus facile à comprendre. Voyons comment tirer avantage de la visualisation de données. --- # La visualisation de données ## Quel est le message ? .center[ <img src="assets/img/table_visu.png" width="100%"></img> ] --- # La visualisation de données ## Et maintenant ? .center[ <img src="assets/img/plot_visu.png" height="450px"></img> ] --- # La visualisation de données ## Une courbe de tendance seule ne suffit pas ! .center[ <img src="assets/img/plot_visu.png" height="450px"></img> ] --- # La visualisation de données ## Les données sont utiles uniquement si elles peuvent être comprises .center[ <img src="assets/img/plot_visu.png" height="450px"></img> ] --- class: inverse, center, middle # Qu'est-ce qui fait une bonne figure ? <hr width="65%" size="0.3" color="orange" style="margin-top:-20px;"></hr> --- # Qu'est-ce qui fait une bonne figure ? ## Quelques questions à se poser : - Quel est le message à communiquer ? - Qui est le public - Quelle est la meilleure façon de visualiser le message Règle générale : **restez simple, utilisez moins d'encre** --- # Qu'est-ce qui fait une bonne figure ? ## Quel est le message de cette figure ? .center[ <img src="assets/img/Pacala.png" width="80%"></img> ] --- # Qu'est-ce qui fait une bonne figure ? ## Trop d'information ! .center[ <img src="assets/img/Pacala.png" width="80%"></img> ] --- # Qu'est-ce qui fait une bonne figure ? ## Comment cette figure pourrait être améliorée ? <br><br> .center[ <img src="assets/img/Boulangeat.png" width="100%"></img> ] --- # Qu'est-ce qui fait une bonne figure ? ## Abus de symboles et de couleurs ! <br><br> .center[ <img src="assets/img/Boulangeat.png" width="100%"></img> ] --- # Qu'est-ce qui fait une bonne figure ? ## Que remarquez-vous en premier ? .center[ <img src="assets/img/Desjardins.png" width="80%"></img> ] --- # Qu'est-ce qui fait une bonne figure ? ## Non respect des normes graphiques .center[ <img src="assets/img/Desjardins.png" width="80%"></img> ] --- class: inverse, center, middle # La première étape : bien identifier le message à communiquer <hr width="65%" size="0.3" color="orange" style="margin-top:-20px;"></hr> --- # Identifier le message ## Voici un exemple illustrant l'importance de visualiser ses données: .center[ <img src="assets/img/table_visu.png" width="100%"></img> ] --- # Identifier le message ## Voici un exemple illustrant l'importance de visualiser ses données: .center[ <img src="assets/img/plot_visu.png" height="450px"></img> ] --- # Communiquer par les graphiques - Les graphiques sont généralement **plus efficaces à communiquer** un message/un résultat qu'un tableau. - **Problème:** La représentation graphique peut parfois nous conduire à une **fausse interprétation**. L'idée est de transmettre une idée sans biaiser le lecteur. --- # Communiquer par les graphiques .center[ <img src="assets/img/deformation.png" width="100%"></img> ] <!-- - Problème: ratio 8/3 --> --- class: inverse, center, middle # Règles et composantes graphiques <hr width="65%" size="0.3" color="orange" style="margin-top:-20px;"></hr> --- # Les composantes graphiques .pull-left[ - Les axes et échelles. - Le titre de la figure. - La légende - Le [type de représentation des données](http://www.datavizcatalogue.com/). ] .pull-right[ .center[ <img src="assets/img/viz.png" width="100%"></img> ] ] --- # Les règles graphiques .pull-left[ - Une figure doit renvoyer un seul message/résultat. - Chaque élément d'une figure doit **aider à comprendre** ce message. - **Choisir le bon type de représentation** permet de mettre en valeur plus facilement ce qui doit être illustré. - **Attention aux normes graphiques**: Choix des couleurs, taille des caractères, épaisseur de la ligne, disposition des marges, cadrage etc. ] .pull-right[ .center[ <img src="assets/img/viz.png" width="100%"></img> ] ] --- # Quelques conseils - Ne pas **JAMAIS** utiliser de diagramme en pointe de tarte .center[ <img src="assets/img/pies_vs_bars.png" width="100%"></img> ] --- # Quelques conseils .pull-left[ - Éviter les figures 3D. - Limiter le nombre de dimensions (3 ou 4 dimensions max). - La multi-dimensionnalité peut être gérée en: - Modifiant la forme et la la taille des points - Ajoutant des couleurs ] .pull-right[ .center[ <img src="assets/img/Pacala.png" height="350px"></img> ] ] --- # Choisir une visualisation ## Présenter une distribution .center[ <img src="assets/img/viz_distribution.png" height="150px"></img> ] ## Montrer une tendance .center[ <img src="assets/img/viz_tendance.png" height="150px"></img> ] --- # Choisir une visualisation ## Comparer ou contraster .center[ <img src="assets/img/viz_comparaison.png" height="150px"></img> ] ## Établir une relation .center[ <img src="assets/img/viz_relation.png" height="150px"></img> ] --- # Choisir une visualisation ## Flux .center[ <img src="assets/img/viz_flux.png" height="150px"></img> ] --- class: inverse, center, middle # Deuxième étape : dessiner sa figure à la main <hr width="65%" size="0.3" color="orange" style="margin-top:-20px;"></hr> --- # Exercice ## 10 minutes Dessinez à la main une proposition de figure pour la phénologie des différentes espèces de chauve-souris du Québec. Message : Les dates de présence des chauve-souris varie selon les espèces. ``` ## X site_id taxa_name date_obs ## 1 354 1 Aeorestes cinereus 2021-06-18 ## 2 355 1 Aeorestes cinereus 2021-08-11 ## 3 356 1 Aeorestes cinereus 2021-08-06 ## 4 357 1 Aeorestes cinereus 2021-06-01 ## 5 358 1 Aeorestes cinereus 2021-08-08 ## 6 359 1 Aeorestes cinereus 2021-08-11 ``` --- # Préparer les données adéquatement - Habituellement un `data.frame` ou `une matrice` - Une observation par ligne (format long) --- # Ouvrir une fenêtre graphique ```r dev.new(width = 10, height = 7) ``` --- # Fixer certains paramètres ```r # Fixer la largeur et la hauteur des marges par(mar = c(5,6,2,1)) # Fixer le nombre de figures en colonnes et rangées par(mfrow = c(1,1)) ``` --- # Démarrer une figure avec `plot()` .font90[ ```r arbres <- read.csv2("assets/data/arbres.csv") densite <- table(arbres[,c(3,5)]) elevation <- as.numeric(row.names(densite)) plot(elevation, densite[,1], axes = TRUE, xlab = "Élévation", ylab = "Densité") ``` <img src="index_files/figure-html/unnamed-chunk-8-1.png" width="55%" style="display: block; margin: auto;" /> ] --- # Échelles logarithmiques ```r plot(elevation, densite[,1], axes = TRUE, xlab = "Élévation", ylab = "Densité", log = "xy") ``` <img src="index_files/figure-html/unnamed-chunk-9-1.png" width="55%" style="display: block; margin: auto;" /> --- # Ajuster les tailles de caractères ## Arguments `cex`, `cex.lab` et `cex.axis` ```r plot(elevation, densite[,1], axes = TRUE, xlab = "Élévation", ylab = "Densité", cex.lab = 1.5, cex.axis = 1.25, cex = 1.5) ``` <img src="index_files/figure-html/unnamed-chunk-10-1.png" width="50%" style="display: block; margin: auto;" /> --- # Modifier les axes .font90[ ```r axis(1, seq(0,1000,100)) axis(2) ``` <img src="index_files/figure-html/unnamed-chunk-12-1.png" width="55%" style="display: block; margin: auto;" /> ] --- # Ajouter un titre ```r title(main = "Densité au long du gradient d'élévation") ``` <img src="index_files/figure-html/unnamed-chunk-14-1.png" width="55%" style="display: block; margin: auto;" /> --- # Superposer des points d'autres données ```r points(elevation, densite[,3], pch = 19, cex = 1.5) ``` <img src="index_files/figure-html/unnamed-chunk-16-1.png" width="55%" style="display: block; margin: auto;" /> --- # Superposer des lignes ```r lines(elevation, densite[,1],lty = 1, lwd = 1.5) lines(elevation, densite[,3], lty = 3, lwd = 1.5) ``` <img src="index_files/figure-html/unnamed-chunk-18-1.png" width="55%" style="display: block; margin: auto;" /> --- # Ajouter une ligne de tendance ```r model = lm(densite[,3]~elevation) summary(model) abline(model, col = "darkred") ``` ``` ## ## Call: ## lm(formula = densite[, 3] ~ elevation) ## ## Residuals: ## Min 1Q Median 3Q Max ## -59.796 -26.743 -3.565 24.050 92.175 ## ## Coefficients: ## Estimate Std. Error t value Pr(>|t|) ## (Intercept) 148.10588 11.23433 13.183 <2e-16 *** ## elevation -0.16650 0.01976 -8.428 5e-11 *** ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ## ## Residual standard error: 40.32 on 48 degrees of freedom ## Multiple R-squared: 0.5968, Adjusted R-squared: 0.5884 ## F-statistic: 71.04 on 1 and 48 DF, p-value: 4.999e-11 ``` --- # Ajouter une ligne de tendance ```r model = lm(densite[,3]~elevation) abline(model, col = "darkred") ``` <img src="index_files/figure-html/unnamed-chunk-22-1.png" width="55%" style="display: block; margin: auto;" /> --- # Ajouter une légende ```r legend("top", bty = "n", pch = c(19,1), lty = 1, legend = c("Érable à sucre", "Sapin baumier"), cex = 1.5) ``` <img src="index_files/figure-html/unnamed-chunk-24-1.png" width="55%" style="display: block; margin: auto;" /> --- # Ajouter du texte ```r r2 <- round(summary(model)$r.squared, 2) text(x = 850, y = 25, paste("R2=",r2), cex = 21.5) ``` <img src="index_files/figure-html/unnamed-chunk-26-1.png" width="55%" style="display: block; margin: auto;" /> --- # Pour plus d'information - `?plot` - `?par` - `?axis` - `?mtext` --- class: inverse, center, middle # Créer d'autres types de figure <hr width="65%" size="0.3" color="orange" style="margin-top:-20px;"></hr> --- # Diagramme de dispersion (Scatter plot) .font80[ ```r arbres <- read.csv2("assets/data/arbres.csv") densite <- table(arbres[,c(3,5)]) elevation <- as.numeric(row.names(densite)) plot(elevation, densite[,1], pch = 19, xlab = "Elevation", ylab = "Densité") points(elevation, densite[,3]) ``` ] <img src="index_files/figure-html/unnamed-chunk-28-1.png" width="52%" style="display: block; margin: auto;" /> --- # Diagrammes à bâtons (Bar plot) ```r arbres <- read.csv2("assets/data/arbres.csv") n_tot <- table(arbres$esp) barplot(n_tot) ``` <img src="index_files/figure-html/unnamed-chunk-30-1.png" width="55%" style="display: block; margin: auto;" /> --- # Histogrammes ```r hist(densite[,3]) ``` <img src="index_files/figure-html/unnamed-chunk-32-1.png" width="55%" style="display: block; margin: auto;" /> --- # Représentation 3-D .font70[ ```r x <- 10*(1:nrow(volcano)) y <- 10*(1:ncol(volcano)) image(x, y, volcano, col = terrain.colors(100), axes = FALSE) axis(1, at = seq(100, 800, by = 100)) axis(2, at = seq(100, 600, by = 100)) box() title(main = "Maunga Whau Volcano", font.main = 4) ``` ] <img src="index_files/figure-html/unnamed-chunk-34-1.png" width="45%" style="display: block; margin: auto;" /> --- # Lignes de contour .font70[ ```r x <- 10*(1:nrow(volcano)) y <- 10*(1:ncol(volcano)) image(x, y, volcano, col = terrain.colors(100), axes = FALSE) axis(1, at = seq(100, 800, by = 100)) axis(2, at = seq(100, 600, by = 100)) box() title(main = "Maunga Whau Volcano", font.main = 4) contour(x, y, volcano, levels = seq(90, 200, by = 5), add = TRUE, col = "black") ``` ] <img src="index_files/figure-html/unnamed-chunk-36-1.png" width="45%" style="display: block; margin: auto;" /> --- # Enregistrer une figure ```r dev.copy(pdf, file = "test.pdf") dev.copy(png, file = "test.png") dev.copy(svg, file = "test.eps") ``` --- # Exercice ## 15 minutes Scripter votre figure sur R à l'aide des [données](./assets/data/phenologie.csv) Si elle est trop élaborée, vous pouvez la simplifier pour la rendre plus facile à réaliser --- # Exercice .center[ <img src="assets/img/pheno_1.png" width="100%"></img> ] --- # Exercice .center[ <img src="assets/img/pheno_2.png" width="100%"></img> ] --- class: inverse, center, middle # Troisième étape : être créatif ! <hr width="65%" size="0.3" color="orange" style="margin-top:-20px;"></hr> --- # Créativité ## Créer d'autres types de figures [Animation](https://quebio.ca/connect/?lang=fr#9/46.2359/-72.3120) [Interactivité](https://biodiversite-quebec.ca/fr/inventaires/site/268) [Infographies](https://www.visualcapitalist.com/history-of-pandemics-deadliest/) --- class: inverse, center, middle # Travail de la semaine <hr width="65%" size="0.3" color="orange" style="margin-top:-20px;"></hr> --- # Consignes - Identifier clairement vos questions de recherche - Compléter votre analyse au moyen de 3 figures et 1 tableau --- # Attentes pour le travail de session - Clareté des questions et adéquation des figures et du tableau - Efficacité de la présentation - Respect de normes graphiques - Originalité --- # Lectures Est-ce que la science ouverte peut prévenir la fraude ? .center[ <img src="assets/img/spider.png" width="30%"></img> ] [Lien vers l'article dans Science](https://www.sciencemag.org/news/2020/01/spider-biologist-denies-suspicions-widespread-data-fraud-his-animal-personality) [Et un lien vers un blog qui explique comment la triche a été réalisée](https://laskowskilab.faculty.ucdavis.edu/2020/01/29/retractions/) --- class: inverse, center, middle # Évaluation formative #2 <hr width="65%" size="0.3" color="orange" style="margin-top:-20px;"></hr> ## Structurer sa base de données --- ## Évaluation formative #2 Chaque équipe doit évaluer les scripts d'une autre équipe - À compléter pour le **8 avril** - La personne qui a remis le travail est responsable d'entrer l'évaluation - Tous les commentaires doivent être formulés comme une question ---