Dernière mise à jour : 25/02/2022
\newpage
Il s'agit d'un tuto pour mes fonctions perso, réunnies dans le package au doux sobriquet de Renaudpack2. Pourquoi Renaupack2 égoet pas un nom un peu moins égocentré ? Pour rappeller que c'est un package personnel, qui regroupe mes fonctions perso.. Alors oui, je le partage volontier, mais non, je ne veux pas que ça devienne un package classique du CRAN dont je devrais assurer la maintenance et le service après-vente...
Il s'agit pour la plupart de fonctions écrites en R base et point de ggplot2 ou de dplyr dedans.. Je suis de la vieille école et suis relativement à l'aise avec les bricolages de R base. Les grammaires spécifiques à ces nouveaux écosystèmes de package ggplot2 ou de dplyr, je ne me les suis jamais vraiment approprié et j'ai l'impression d'aller plus vite avec base.. C'est donc fort probable que des solutions plus fancy existent dans ces nouveaux packages, pour faire la même chose que ce que je propose ici..
Depuis peu l'installation est possible via Github, c'est ultra simple en utilisant une fonction du package devtools, qu'il faut donc potentiellement installer si ce n'est déjà fait. Mais depuis peu également, un autre package rtools dont dépends devtools, doit être installé comme un plug-in à part, si vous ne l'avez jamais fais, téléchargez et installer rtools à partir du lien suivant :
https://cran.r-project.org/bin/windows/Rtools/
install.packages("devtools") #A ne faire que si vous n'avez jamais installé devtools library(devtools) devtools::install_github("RenaudJau/Renaudpack2")
install.packages("devtools") #A ne faire que si vous n'avez jamais installé devtools library(devtools) devtools::update_packages("Renaudpack2")
Comme n'importe quel package, avec library :
library(Renaudpack2)
\newpage
Pour les besoins de ce tuto, on créé des fausses données :
biomasse<-c(rnorm(35,20,5),rnorm(35,15,3),rnorm(35,5,3)) traitement<-factor(rep(c("T1","T2","T3"),each=35))
barres.plotLe graphique de base :
barres.plot(biomasse,traitement)
\newpage
Il y a plusieurs choses que l'on peut modifier pour personaliser son graphique :
changer le type d'erreur représentée
ajouter des lettres d'un test post-hoc
changer des param?tres classiques de la fonction barplot
changer l'ordre des modalit?s (?a ?a n'est pas sp?cifique ? la fonction barres.plot)
on peut aussi modifier l'axe des abscisses (cf les arguments las.x, cex.x et labels.x de la fonction barres.plot.beside expliquée plus tard.
par(mfrow=c(2,2)) #pour avoir 4 graphiques sur une m?me fen?tre barres.plot(biomasse,traitement,ecart=sd) #erreur standard par d?faut, ici ?cart-type barres.plot(biomasse,traitement,lettres=c("a","ab","b")) barres.plot(biomasse,traitement,lettres=c("a","ab","b"), col=c("cadetblue","gold","orange"), xlab="Traitements herbicides",ylab="Biomasse",font.lab=3, main="Efficacite des traitement") traitement2<-factor(traitement,levels=c("T3","T1","T2")) barres.plot(biomasse,traitement2)
\newpage
anovLettersSi vous ne voulez pas vous embêter à calculer vous même les lettres des tests post-hoc, et si et uniquement si vous ?tes dans les conditions d'utilisation d'une ANOVA ? un facteur, alors on peut faire ?a :
anov<-aov(biomasse~traitement) summary(anov)
OK, il y a un effet significatif, du coup anovLetters renvoie la liste des lettres...
lettresPH<-anovLetters(VAR = biomasse,FAC = traitement) lettresPH
...que l'on peut utiliser directement sur barres.plot :
barres.plot(biomasse,traitement,lettres = lettresPH)
*Note : possibilité de changer le seuil alpha en utilisant l'argument ALPHA.
Bon.. cette fonction fonctionne bien après une anova
\newpage
barres.plot.besidePour les besoins de ce tuto, on cr?? des fausses donn?es, avec 2 facteurs, l'?ge et le sexe, et une variable, la taille :
Age=factor(rep(c(2,10,20,30),each=10)) Sexe=factor(rep(rep(c("Homme","Femme"),5),4)) Taille=c(rnorm(5,60,7),rnorm(5,55,7),rnorm(5,145,15),rnorm(5,129,15),rnorm(5,175,15), rnorm(5,165,15),rnorm(5,175,15),rnorm(5,165,15))
En gros ?a donne ?a :
library(knitr) kable(head(data.frame(Age,Sexe,Taille)))
Le graphique de base :
barres.plot.beside(Taille,Sexe,Age)
\newpage
On peut aussi modifier quelques petits trucs :
barres.plot.beside(Taille,Age,Sexe,col=c("burlywood1","darkseagreen3"))
Attention, les lettres et ?toiles sont ? d?finir soit m?me, c-?-d apr?s tests statistiques, ici pour l'exemple, c'est de l'al?atoire...), et avec des couleurs simples (mais moches...)
barres.plot.beside(Taille,Sexe,Age,POSI="bottom", lettres=c("a","b","c","c","a","b","c","c"), etoiles=c("*","***"),ylab="Taille (cm)",col=2:5)
\newpage
On peut aussi modifier l'axe des abscisses :
las.x et la taille avec cex.x :barres.plot.beside(Taille,Age,Sexe,las.x = 2, cex.x = 0.6)
labels.x : barres.plot.beside(Taille,Age,Sexe,labels.x = c("2 ans","10 ans","20 ans","30 ans"))
Attention, changer les noms ne veut pas dire qu'on change l'ordre des facteurs.. ne pas écrire n'importe quoi..
\newpage
colorRampPalette et une l?gendepar(mfrow=c(1,2)) coul<-c(colorRampPalette(colors=c("olivedrab1", "grey22"))(4)) barres.plot.beside(Taille,Sexe,Age,POSI="bottom", lettres=c("a","b","c","c","a","b","c","c"), etoiles=c("*","***"),col=coul,ylab="Taille (cm)") plot(1,type="n",axes = F,ann = F) legend("topleft",levels(Age),fill=coul,bty="n")
par(mfrow=c(1,2)) coul2<-c(colorRampPalette(colors=c("lightgoldenrod1", "gold4"))(4), colorRampPalette(colors=c("salmon", "firebrick4"))(4)) barres.plot.beside(Taille,Sexe,Age,POSI="bottom", lettres=c("a","b","c","c","a","b","c","c"), etoiles=c("*","***"),col=coul2,ylab="Taille (cm)") plot(1,type="n",axes = F,ann = F) legend("topleft",paste(rep(levels(Sexe),each=length(levels(Age))), rep(levels(Age),2),sep=" "),fill=coul2,bty="n")
\newpage
Tableau_recapCette fonction n'est pas graphique, elle donne les informations de barres.plot sous forme d'un tableau. Elle a peu d'utilit? en dehors d'un document Rmarkdown.
Tableau_recap(VAR = biomasse,FAC = traitement,ROUND = 2)
Pour que ce soit plus joli, il est cosneill? d'utiliser la fonction kabledu package knitr (pour l'installer : install.packages("knitr")).
kable(Tableau_recap(VAR = biomasse,FAC = traitement,ROUND = 2))
Si on fait un test posthoc, on peut rajouter les lettres dans le tableau :
anov<-aov(biomasse~traitement) summary(anov) TukeyHSD(anov) #les lettres sont donc a, b et c : kable(Tableau_recap(VAR = biomasse,FAC = traitement,ROUND = 2, LETTRES = c("a","b","c")))
\newpage
Time.factor.plotPour les besoins de ce tuto, on cr?? des fausses donn?es :
tim<-rep(c(1:4),each=6) fac<-factor(rep(rep(c("A","B"),each=3),4)) vari<-c(rnorm(3,5,2),rnorm(3,3,2),rnorm(3,3,2),rnorm(3,8,2), rnorm(3,8,2),rnorm(3,10,2),rnorm(3,16,2),rnorm(3,12,2))
En gros ?a donne ?a :
kable(head(data.frame(tim,fac,vari)))
Utilisation de la fonction : Pourquoi ce message d'erreur? Bonne question.. ? r?soudre..
Time.factor.plot(tim,fac,vari,etoiles=c("*","***","","***"), pch = c(15,16),couleur = c("darkolivegreen","firebrick"), lty = c(1,2))
Couleur_continue et modif_coulCouleur_continue permet de transformer une variable en palette de couleur, utile pour ajouter une 'dimension' ? un plot en 2D
Par exemple, si on a des donn?es (fausses ici..) avec la couverture v?g?tale en fonction de l'altitude, et une information sur la taille des plantes :
taille<-c(89.2,18,40.1,90.6,86.0,83.9,90.6,84.9,56,88.4,74.1,65.6, 49.0,33.0,22.8,16.3,11.2,9.7,10,6.8,36,2.9,7.8,8.5,5.9,2.9,0.2,28,11.5,15.7) recouvrement<-c(99,98,99,96,96,96,96,92,92,93,90,95,90,85,80,71,75,63, 54,49,36,21,7,12,19,32,46,60,71,88) altitude<-c(467,1257,1955,2287,1920,1397,1002,1403,1816,2257,2438,2641, 2821,2287,1961,2292,2624,2327,2630,2769,2839,2787,2752,2385, 2141,2037,1688,1484,1554,1374) kable(head(data.frame(taille,recouvrement,altitude)))
On peut cr?er une couleur pour chaque valeur de taille (ici avec des couleurs plus froides pour les tailles les plus petites) :
coul_taille<-Couleur_continue(VAR = taille,COLORS = c("cadetblue","firebrick")) coul_taille
Ces couleurs (en code h?xad?cimal) peuvent ?tre utilis?es dans un graphique, avec la possibilit? de changer les couleurs comme on veut :
par(mfrow=c(1,2)) plot(x = altitude, y = recouvrement, pch=16, cex=2, col=coul_taille) plot(x = altitude, y = recouvrement, pch=16, cex=2, col=Couleur_continue(taille,COLORS=c("Orange","Green")))
\newpage
La fonction modif_coul permet de modifier une couleur existante :
Par exemple, en partant de la couleur cadetblue (qui est un bleu pastel), on peut :
modifier la saturation, sous 0.5 ?a d?sature, au dessus, ?a sature
modifier la brillance, sous 0.5 ?a fonce, au dessus, ?a ?claircit
modifier la teinte, ?a tourne en rond..
modifier la transparence sous 1, ?a devient transparent
par(mfrow=c(3,2)) plot(x = altitude, y = recouvrement, pch = 16, cex = 8, col = "cadetblue", main = 'col = "cadetblue"') plot(1,type="n",axes = F,ann = F) #juste pour un graphique vide.. plot(x = altitude, y = recouvrement, pch = 16, cex = 8, col = modif_coul(COULEUR = "cadetblue",mods = 0.2), main = "mods = 0.2") plot(x = altitude, y = recouvrement, pch = 16, cex = 8, col = modif_coul(COULEUR = "cadetblue",modv = 0.9), main = "modv = 0.9") plot(x = altitude, y = recouvrement, pch = 16, cex = 8, col = modif_coul(COULEUR = "cadetblue",modh = 0.8), main = "modh = 0.8") plot(x = altitude, y = recouvrement, pch = 16, cex = 8, col = modif_coul(COULEUR = "cadetblue",alpha = 0.5), main = "alpha = 0.5")
\newpage
On peut aussi combiner les deux fonctions :
coul_taille_transp <- sapply(coul_taille, function(x) modif_coul(x, alpha = 0.5)) plot(x = altitude, y = recouvrement, pch=16, cex=8, col=coul_taille_transp)
\newpage
point.plotQuasi identique ? l'utilisation de barres.plot.. Le graphique de base :
point.plot(biomasse,traitement)
\newpage
Il y a plusieurs choses que l'on peut modifier pour personaliser son graphique :
changer le type d'erreur repr?sent?e
ajouter des lettres d'un test post-hoc
changer des param?tres classiques de la fonction barplot
changer l'ordre des modalit?s (?a ?a n'est pas sp?cifique ? la fonction point.plot) et surajouter sur un graphique
par(mfrow=c(2,2)) #pour avoir 4 graphiques sur une m?me fen?tre point.plot(biomasse,traitement,ecart=sd) #erreur standard par d?faut, ici ?cart-type point.plot(biomasse,traitement,lettres=c("a","ab","b")) point.plot(biomasse,traitement,lettres=c("a","ab","b"), xlab="Traitements herbicides",ylab="Biomasse",font.lab=3, main="Efficacite des traitement") traitement2<-factor(traitement,levels=c("T3","T1","T2")) point.plot(biomasse,traitement2) point.plot(biomasse/2,traitement2, add = TRUE)
\newpage
multivar.polygLa fonction multivar.polyg permet de regrouper des points dans une analyse en faisant un polygone autour. On prends
Il faut :
ANAcoo coordonnées des points d'une analyse multivariées (__$points pour une NMDS, __$li pour une AFC, etc.)FAC facteur qui permettra de séparer les polygoneslibrary(vegan) data("dune") data("dune.env") NMDS <- metaMDS(dune)
multivar.polyg(ANAcoo = NMDS$points, FAC = dune.env$Use)
Avec d'autres arguments si besoin :
multivar.polyg(ANAcoo = NMDS$points, FAC = dune.env$Use, pch = 16, # forme des points des sites col_dot = c("darkolivegreen","cadetblue","firebrick") #couleur des points des sites )
multivar.polyg(ANAcoo = NMDS$points, FAC = dune.env$Use, col_fill = c("darkolivegreen","cadetblue","firebrick") #couleur des polygones )
Mieux vaux utiliser la fonction modif_coul pour ajouter de la transparence :
multivar.polyg(ANAcoo = NMDS$points, FAC = dune.env$Use, col_fill = modif_coul(c("darkolivegreen","cadetblue","firebrick"),alpha = 0.5))
Et encore :
multivar.polyg(ANAcoo = NMDS$points, FAC = dune.env$Use, col_bord = c("darkolivegreen","cadetblue","firebrick"), #couleur des bordures des polygones col_text = c("darkolivegreen","cadetblue","firebrick"), #couleur du texte cex_lab = 1.5, # taille des étiquettes dot = "no" # présence ou non des points des sites )
Possibilité aussi avec les arguments lab de ne pas afficher les étiquettes des modalités, new de ne pas faire ça sur un nouveau graphe mais sur un graphe existant, et sep de faire une nouvelle fenêtre pour chaque modalité du facteur.
\newpage
MultiDyn\newpage
better_arrows\newpage
label.corV2La fonction label.corV2 permet de calculer les corrélations des espèces avec les axes et d'afficher seulement les plus corrélées.
Il y a plusieurs arguments obligatoires :
COO_ESP Coordonnées des espèces suites à une ordination, pour les deux premiers axes, après dudi.pca et dudi.coa c'est ANALYSE$co[,1:2], après decorana c'est ANALYSE$cproj[,1:2], après metaMDS c'est ANALYSE$species[,1:2], etc.COO_REL Coordonnées des relevés suites à une ordination, pour les deux premiers axes, après dudi.pca et dudi.coa c'est ANALYSE$li[,1:2], après decorana c'est ANALYSE$rproj[,1:2], après metaMDS c'est ANALYSE$points[,1:2], etc.RELEVES les relevés ayant servi à faire l'analyse multivariéeMETHOD Méthode de choix des espèces à afficher, soit "P" (défaut) - les espèces dont le p du test de spearman sont inférieures à la valeur de P sur au moins un axe sont affichées, soit "RHO" - les espèces dont le Rho du test de spearman sont supérieur à RHO sur au moins un axe sont affichées, soit "N_base_P" - les N espèces dont le P sont les plus faibles sont affichées, soit "N_base_RHO" - les N espèces dont les RHO sont les plus fort sont affichées.Selon la méthode choisie, vous devrez aussi renseigner :
P la p value maximum pour être affichéeRHO le Rho minimum pour être affichée N le nombre d'espèces à afficher, attention, si des ex-aequo, pour ne pas surcharger, il y a moins d'espèces affichées que le N choisiEt éventuellement :
COEF un coef multiplicateur (pour exploser ou non la dispersion dans le plan)ADD par defaut, créer un graphe seul, si add=T, les noms d'especes sont ajouté au graphe déjà existant... d'autres arguments de la fonction textPour l'exemple, on récupère les données dune du package vegan et on fait une NMDS :
library(vegan) data("dune") NMDS <- metaMDS(dune)
library(vegan) data("dune") NMDS <- metaMDS(dune)
\newpage
Usage de la fonction :
label.corV2(COO_ESP = NMDS$species[,1:2], COO_REL = NMDS$points[,1:2], RELEVES = dune, METHOD = "P", P = 0.05)
plot(NMDS$points[,1:2]) label.corV2(COO_ESP = NMDS$species[,1:2], COO_REL = NMDS$points[,1:2], RELEVES = dune, METHOD = "RHO", RHO = 0.5, ADD = T)
\newpage
label.corV2(COO_ESP = NMDS$species[,1:2], COO_REL = NMDS$points[,1:2], RELEVES = dune, METHOD = "N_base_P", N = 10)
label.corV2(COO_ESP = NMDS$species[,1:2], COO_REL = NMDS$points[,1:2], RELEVES = dune, METHOD = "N_base_RHO", N = 15)
\newpage
text:label.corV2(COO_ESP = NMDS$species[,1:2], COO_REL = NMDS$points[,1:2], RELEVES = dune, METHOD = "N_base_RHO", N = 15, col="cadetblue", cex=1.5, font = 3)
COEF :plot(NMDS$species, ylim = c(-2, 2), xlim = c(-2,2)) label.corV2(COO_ESP = NMDS$species[,1:2], COO_REL = NMDS$points[,1:2], RELEVES = dune, METHOD = "N_base_RHO", N = 15, col="cadetblue", cex=0.5, COEF = 0.5, ADD = T) label.corV2(COO_ESP = NMDS$species[,1:2], COO_REL = NMDS$points[,1:2], RELEVES = dune, METHOD = "N_base_RHO", N = 15, col="cadetblue2", cex=1, COEF = 1.5, ADD = T) label.corV2(COO_ESP = NMDS$species[,1:2], COO_REL = NMDS$points[,1:2], RELEVES = dune, METHOD = "N_base_RHO", N = 15, col="cadetblue4", cex=1.5, COEF = 2, ADD = T)
\newpage
label.corDCA\newpage
label.corNMDS\newpage
BBtransfClasses_defcombin.tabcombin.tabV0ComStructIndicesstructure.plotstructure.plotV2``
``
``
``
``
``
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.