knitr::opts_chunk$set( collapse = TRUE, comment = "#>", echo = TRUE, dev = "svg", fig.ext = "svg" ) library(gt) library(scales) library(ggplot2)
Nous aurons besoin du package RColorBrewer
:
RColorBrewer
est bien installélibrary(RColorBrewer)
Nous allons également avoir besoin des données fruits :
data("fruits", package = "minidebuter")
RColorBrewer
ggplot
favorisggplot2
pheatmap
Voici trois manières de définir une couleur, qui permettent de colorier un graphe soit très rapidement (entiers), soit avec plus de possibilités (couleurs nommées) ou encore de manière très raffinée (HEX).
coltab <- data.frame( Entier = c(1, 2, 3, 4, 5, 6, 7, 8), Nom = c("black", "indianred2", "palegreen3", "dodgerblue2", "turquoise", "magenta3", "darkgoldenrod1", "gray62"), HEX = c("#000000", "#DF536B", "#61D04F", "#2297E6", "#28E2E5", "#CD0BBC", "#F5C710", "#9E9E9E") ) coltab_transposed <- as.data.frame( t(coltab), stringsAsFactors = FALSE) # Créer l'objet gt avec la table transposée gt(coltab_transposed) %>% data_color( columns = everything(), fn = function(x) { grep("^#", x, value = TRUE) } ) %>% cols_align(align = "center", columns = everything()) %>% cols_label(.list = setNames(rep("", ncol(coltab_transposed)), colnames(coltab_transposed)))
La palette de 8 couleurs par défaut de R est codée par les entiers de 1 à 8.
barplot(rep(1,8), col = 1:8)
On peut également colorier avec des "noms" de couleur (e.g. "black"
, "tomato"
, "steelblue"
, "darkorchid"
etc.)
On peut accéder à tous ces noms de couleur avec la commande colors()
:
sample(colors(), 7)
Ces couleurs "nommées" s'utilisent de la même façon que les couleurs "numériques".
On peut aussi utiliser des codes hexadécimaux pour coder une couleur dans le système de référence "Rouge - Vert - Bleu" :
hexdat <- data.frame( x = 1:6, col = rep(c("#FF0000", "#00FF00", "#0000FF"), each = 2) ) zesize <- 20 ggplot(hexdat, aes(x = x)) + geom_point(aes(color = I(col)), y = 1, size = zesize) + annotate("text", x = 0, y = 1, label = "#", size = zesize) + theme_minimal() + xlim(c(-0.2, 6.2)) + theme_void()
Voici trois commandes équivalentes pour réaliser le même graphe ci-dessous :
barplot(rep(1, 3), col = 2:4) barplot(rep(1, 3), col = c("indianred2", "palegreen3", "dodgerblue2")) barplot(rep(1, 3), col = c("#DF536B", "#61D04F", "#2297E6"))
barplot(rep(1, 3), col = 2:4)
Reproduisez le graphe ci-dessous avec le système de couleurs de votre choix :
{width=80%}
S'il y a plus d'objets à colorier que de couleurs, les couleurs sont recyclées !
par(mar = c(0, 0, 0, 0)) barplot(rep(1,80), col = 1:8, border = NA, space = 0, axes = FALSE)
Il existe de nombreux packages en R permettant de générer des palettes de couleur. Nous allons en utiliser un seul pendant ce cours : RColorBrewer
.
La commande suivante permet de visualiser toutes les palettes que ce package permet d'utiliser :
display.brewer.all()
Pour extraire des couleurs de ces palettes :
brewer.pal(n = 3, name = "Set3")
{width=100%}
Il y a trois types de palettes : séquentielles, divergentes et qualitatives.
Complétez le code suivant pour obtenir le graphe ci-contre :
pal <- brewer.pal(***, ***) barplot(rep(1, 7), col = pal, axes = ***, border = ***)
{width=100%}
On utilise la fonction de base grDevices::colorRampPalette
:
colfun <- colorRampPalette(c("darkorchid", "black", "limegreen")) barplot(rep(1, 30), col = colfun(30), axes = F, border = NA)
Reproduisez le graphe ci-contre en modifiant la commande ci-dessous.
colfun <- colorRampPalette( c(***, ***, ***)) barplot(rep(1, 100), col = colfun(100), axes = F, border = NA)
{width=100%}
Dans ggplot2
, l'opacité se gère avec alpha
: 0 = invisible, 1 = opaque.
De manière générale : on peut opacifier sa couleur préférée avec le code HEX : on ajoute deux chiffres héxadécimaux OPTIONNELS pour régler l'opacité à la fin d'un code couleur.
hexdat <- data.frame( x = 1:8, col = rep(c("#FF0000", "#00FF00", "#0000FF", "#11111170"), each = 2) ) zesize <- 20 ggplot(hexdat, aes(x = x)) + geom_point(aes(color = I(col)), y = 1, size = zesize) + annotate("text", x = 0, y = 1, label = "#", size = zesize) + theme_minimal() + xlim(c(-0.2, 8.2)) + theme_void()
Reproduisez le graphe ci-contre en modifiant la commande ci-dessous.
colfun <- colorRampPalette( c("#FFAA00FF", ***), alpha = TRUE) barplot(***, col = colfun(100), axes = F, border = NA)
{width=100%}
ggplot2
Nous aurons besoin du package ggpubr
:
ggpubr
est bien installélibrary(ggpubr)
Avec la commande scale_fill_brewer
ggplot(fruits, aes(x = groupe, fill = groupe)) + geom_bar() + scale_fill_brewer(palette = "Set1") + theme_bw()
ggplot(fruits, aes(x = groupe, fill = groupe)) + geom_bar() + scale_fill_brewer(palette = "Set1") + theme_bw()
Avec la commande scale_color_distiller
ggplot(fruits, aes(x = Phosphore, y = Calcium, color = Magnesium)) + geom_point() + scale_color_distiller(palette = "PuOr") + theme_bw()
ggplot(fruits, aes(x = Phosphore, y = Calcium, color = Magnesium)) + geom_point() + scale_color_distiller(palette = "PuOr") + theme_bw()
Avec la commande scale_fill_manual
ggplot(fruits, aes(x = groupe, fill = groupe)) + geom_bar() + scale_fill_manual( values = c(crus = "violet", secs = "brown3", exotique = "limegreen", compote = "skyblue")) + theme_bw()
ggplot(fruits, aes(groupe, fill = groupe)) + geom_bar() + scale_fill_manual( values = c(crus = "violet", secs = "brown3", exotique = "limegreen", compote = "skyblue")) + theme_bw()
Avec la commande scale_color_gradient
ggplot(fruits, aes(x = Phosphore, y = Calcium, color = Magnesium)) + geom_point() + scale_color_gradient( low = "limegreen", high = "violet") + theme_bw()
ggplot(fruits, aes(x = Phosphore, y = Calcium, color = Magnesium)) + geom_point() + scale_color_gradient( low = "limegreen", high = "violet") + theme_bw()
ggplot(fruits, aes(groupe, VitamineC)) + geom_boxplot(aes(color = groupe)) + geom_signif(comparisons = list(c("crus", "exotique"))) + theme_bw()
g1 <- ggplot(fruits, aes(Eau)) + geom_histogram() g2 <- ggplot(fruits, aes(Energie)) + geom_histogram() ggarrange(g1, g2, labels = "AUTO")
ggvenn
Nous aurons besoin du package ggvenn
:
ggvenn
est bien installélibrary(ggvenn)
Créons une liste d'objets :
flist <- list( Sucres = fruits$nom[fruits$Sucres > 20], Fibres = fruits$nom[fruits$Fibres > 2], Energie = fruits$nom[fruits$Energie > 50], Potassium = fruits$nom[fruits$Potassium > 100] )
Compliqués à lire à partir de 4 ensembles :
ggvenn(flist, set_name_size = 4)
En utilisant la (très pratique) fonction ggsave
:
g <- ggvenn(flist, set_name_size = 4) ggsave(filename = "fruit_venn.pdf", plot = g)
Voir l'aide de la fonction ?ggvenn
fill_color
, fill_alpha
pour les couleurs à l'intérieur des cercles,stroke_color
, stroke_alpha
, stroke_size
, stroke_linetype
pour le contour des cercles,set_name_color
, set_name_size
pour les noms des ensembles,text_color
, text_size
pour le texte à l'intérieur des intersectionsUpSetR
Nous aurons besoin du package UpSetR
:
UpSetR
est bien installélibrary(UpSetR)
On reprend l'exemple avec la comparaison des fruits selon 4 critères.
mat01 <- data.frame( Sucres = fruits$Sucres > 20, Fibres = fruits$Fibres > 2, Energie = fruits$Energie > 50, Potassium = fruits$Potassium > 100) + 0 upset(mat01)
pheatmap
Nous aurons besoin du package pheatmap
:
pheatmap
est bien installélibrary(pheatmap)
pheatmap(fruits)
Error in hclust(d, method = method) : NA/NaN/Inf dans un appel à une fonction externe (argument 10) De plus : Warning messages: 1: In dist(mat, method = distance) : NAs introduits lors de la conversion automatique 2: In dist(mat, method = distance) : NAs introduits lors de la conversion automatique
pheatmap(fruits[, -(1:2)])
pheatmap(fruits[, -(1:2)])
cluster_rows = FALSE
: enlever le dendrogramme sur les lignesscale = "column"
: pour standardiser les variablesshow_rownames = FALSE
: pour cacher les noms des lignescellwidth = 10
: pour avoir des plus petites cellulesPour avoir une liste complète des arguments : ?pheatmap
pheatmap( fruits[, -(1:2)], cluster_rows = FALSE, scale = "column", show_rownames = FALSE, cellwidth = 10 )
pheatmap( fruits[, -(1:2)], cluster_rows = FALSE, scale = "column", show_rownames = FALSE, cellwidth = 10 )
colfun <- colorRampPalette( c("darkorchid", "white", "limegreen")) pheatmap( fruits[, -(1:2)], cluster_rows = FALSE, scale = "column", show_rownames = FALSE, cellwidth = 10, color = colfun(20) )
colfun <- colorRampPalette( c("darkorchid", "white", "limegreen")) pheatmap( fruits[, -(1:2)], cluster_rows = FALSE, scale = "column", show_rownames = FALSE, cellwidth = 10, color = colfun(20) )
colfun <- colorRampPalette( c("darkorchid", "white", "limegreen")) fruitsDF <- data.frame( fruits[,-1], row.names = make.unique(fruits$nom)) annotLignes <- fruitsDF[, "groupe", drop = FALSE] pheatmap( fruitsDF[, -1], cluster_rows = FALSE, scale = "column", show_rownames = FALSE, cellwidth = 10, color = colfun(20), annotation_row = annotLignes )
colfun <- colorRampPalette(c("darkorchid", "white", "limegreen")) fruitsDF <- data.frame(fruits[,-1], row.names = make.unique(fruits$nom)) annotLignes <- fruitsDF[, "groupe", drop = FALSE] pheatmap( fruitsDF[, -1], cluster_rows = FALSE, scale = "column", show_rownames = FALSE, cellwidth = 10, color = colfun(20), annotation_row = annotLignes )
Changez la commande suivante pour obtenir un joli graphe.
pheatmap( t(fruits), scale = "row", color = c("black", "black"), legend_breaks = c(-6, 0,+6), border_color = "pink", cellheight = 100, cellwidth = 0.1, show_colnames = "FALSE" )
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.