Graphique avec gradient de couleurs et de tailles de points en fonction d'un vecteur

en langage R

Il est possible avec le logiciel R de tracer un graphique dont les données seront colorisées selon un critère particulier.

Étude du niveau de couverture végétale entre la conductivité et la salinité du sol (exemple)

Sur cette exemple (simulé), les points ont été colorés en fonction d'un vecteur qui relève les données de couverture foliaire.

De même la taille des points varie selon ce critère. Une légende affiche la correspondance du gradient de couleur.

Gradient de couleurs - gradient de tailles de points - tri de couleurs en fonction d'un vecteur R project CRAN

x_sels = abs(sort(abs(rnorm(500,10,5)))+rnorm(500,0,1.5))

y_conductivite = abs(sort(abs(rnorm(500,8,5)))+rnorm(500,0,1.5))

z_niveau_foliaire = sort(abs(rnorm(500,10,4)))

2. Générer un vecteur rempli d'un gradient de couleurs. Ces couleurs seront triées en fonction du vecteur z_niveau_foliaire

#Créer un gradient de couleurs triées en fonction du vecteur z

colfunc<-colorRampPalette(c("red","yellow","springgreen","#196F3D"))

colors <- (colfunc(500))

colors <- colors[rank(z_niveau_foliaire)]

3. Créer un vecteur contenant des tailles de 0 à 2 indexées sur le vecteur z_niveau_foliaire

#Créer un gradient de taille de points en fonction du niveau foliaire

cex_pch = round(z_niveau_foliaire/12,1)+0.5

4. Tracer le graphique

# Tracer le graphique seul

plot(x_sels,y_conductivite,pch=3,lwd=1.2,cex=cex_pch, col=colors )

5. Reprendre le graphique en y ajoutant un légende en gradient de couleur

# Tracer cette fois-ci le graphique avec sa légende

dev.off() # ferme les anciennes fenêtes

# Fenêtre du graphique (en bas à droite sur la partie x de 20% à 100% et la partie y de 0% à 90% ==> c(0.2,1,0,0.9) -  + Une marge importante en bas et à droite ==> mar = c(4,0,0.5,2)

par(fig=c(0.2,1,0,0.9), mar = c(6,4,0.5,2), new=TRUE)

plot(x_sels,y_conductivite,pch=3,lwd=1.2,cex=cex_pch,col=colors,xlab="sels",ylab="conductivité")

# Graphique 2 : fenêtre de la légende

par(fig=c(0,0.2,0,0.9), mar = c(2,0,0.5,2), new=TRUE)

# Préparer une image raster : gradient de couleur de la légende

legend_image <- as.raster(matrix(rev(colfunc(20)), ncol=1))

# Tracer un graphique blanc à la place de la légende

plot(c(0,2),c(0,1),type = 'n', axes = F,xlab = '', ylab = '', main = 'legend title',cex.main=0.5)

# Tracer les graduations de la légende, ici le paramétrage en est strictement manuel 5 paliers entre 0 et 1

text(x=1.5, y = seq(0,1,l=5), labels = seq(0,1,l=5))

# Ajouter l'image de gradient

rasterImage(legend_image, 0, 0, 1,1)

Mise à jour de la page juin 2020