DATA\WAX

Tag: R

Carte de Flux sous R

Dans le cadre de mes travaux actuels, j'avais besoin d'avoir une idée des relation de l'Afrique de l'Ouest avec le reste du monde en termes d'échanges alimentaires. Plutôt que de faire un simple tableau avec les données d'export/import, je me suis dit "faisons une carte des flux avec des liaisons de taille proportionnelle à l'intensité de la variables". Voilà Voilà je me suis donc lancée là dessus …. sur R!

Les données que proviennent de la World Integrated Trade Solution , j'ai récupéré les valeurs des échanges alimentaires (Food Products) pour les imports/exports pour les 10 pays ayant le plus de poids.

Le code a été adapté de http://flowingdata.com/2011/05/11/how-to-map-connections-with-great-circles/

Voici donc mon code R:

# Création d'une carte de flux sous R

# Chargement des Packages
library(maps)
library(geosphere)

#Initialisation de l'espace de travail
setwd("D:/MyFolder")

#Importation des données
##un tableau comportant au moins 4 colonnes et n lignes correspondant aux n connections
##latitude du point d'origine
##longitude du point d'origine
##latitude du point de destination
##longitude du point de destination
## + une colonne supplémentaire dans le cas où 
##l'on souhaite des traits de taille proportionelle
##à la variable représentée

data<-read.csv("Export.csv", sep=";", dec=".", header=TRUE)

#Importation du fond de carte et mise en forme
map("world", fill=FALSE, boundary=TRUE,bg="white", lwd=1.5, col="lightslategrey")
map.axes()
map.scale(120,-70,ratio=FALSE, relwidth=0.10, cex.main=2)

#Ajout des lignes
##Création d'une palette de couleur

pal <- colorRampPalette(c("royalblue4", "royalblue"))
colors <- pal(10)

##ajout des lignes/connections
for (i in 1:10){
  lat_o<-data[i,1]
  long_o<-data[i,2]
  lat_d<-data[i,3]
  long_d<-data[i,4]
  val<-data[i,5]
  inter <- gcIntermediate(c(long_o, lat_o), c(long_d, lat_d), n=1000, addStartEnd=TRUE)
  lines(inter, col=colors[i],lwd=val)
}

## Finalisation de la mise en page
title("Exports Food Products for West Africa in 2011",font=3, family="serif")
legend("bottomleft",lty=1, col="royalblue",lwd=1,legend="60760 US$ Thousand",cex=1.25)

Et voici mon résultat pour les exports:

Rplot_Trade_Export

Raster et « Jolie » matrice de corrélation sur R et ggplot, petit tuto

Tout est partis de la rédaction d'un article pour une revue de télédétection dans laquelle j'avais une matrice de corrélation à partir d'un raster multibandes à présenter! Bon une matrice de corrélation c'est pas franchement "sexy" à présenter donc je me suis dit que je pouvais grâce à R et toutes les possibilités qu'il offre réussir à faire quelque chose qui change de l'ordinaire!

Dans mon cas, il s'agissait de vérifier la non-stabilité (c'est  à dire la potentielle dynamique) du domaine cultivé en Afrique de l'Ouest à partir du produit MODIS land Cover! Initialement j'ai donc une image avec 11 bandes binaires (culture / non culture, entre 2001 et 2011), présentées ci dessous:

11 bandes (2001-2011) MODIS affichées dans R

Voici donc la démarche que j'ai suivi :

########################################
# Initialisation de l'espace de travail

setwd("D:/MyFolder")

#Packages nécéssaires
library(raster)
library(sp)
library(Hmisc)
library(plyr)
library(reshape2)
library(ggplot2)

#############Importation des données raster et stockage des bandes dans une matrice#######
filename<-'mon_image.tif'# variable stockant le nom du fichier
nband<-nbands(raster(filename)) #variable stockant le nombre de bandes dans l'image
cell<-ncell(raster(filename)) #variable stockant le nombre de pixel d'une bande
mat<-matrix(0, ncol=nband, nrow=cell) #initialisation de la matrice reçevant les valeurs des bandes de l'image

for (i in 1:nband){
  mat[,i]<-getValues(raster(filename, band=i))
}

#############Création de la matrice de corrélation#######
cor<-rcorr(mat,type="pearson") # création de la matrice de corrélation
coef.corr<-cor$r  # récupère la matrice de coefficients de corrélation

#############Mise en forme de la matrice de corrélation pour la création du graphique#######
coef.corr[coef.corr==1]<-0 #valeurs de la diagonale mises à 0

# Boucle garder que la première moitié du tableau de corrélation (éviter la duplication dans le graphique)
for (i in 1:nband){
  for (j in 1:nband){
    if (coef.corr[i,j]==0){
      coef.corr[i:nband,j]<- 0
    }
  }
}

coef.corr[coef.corr==0]<-NA
mat.m<-melt(coef.corr, na.rm=FALSE)
mat.n<-ddply(mat.m, .(Var1), transform)
r<-round(mat.n$value,2) #arrondissement des coefficients de corrélation à deux chiffres après la virgule
mat.r<-cbind(mat.n[,1:2],r)

#############Diagramme à deux dimensions avec ggplot2#######
labelsx<-seq(2001,2011,1) #noms de l'axe des x
labelsy<-seq(2001,2011,1) #noms de l'axe des y

#Graphique

ggplot(mat.r, aes(factor(Var1), factor(Var2), label=r))+ geom_tile(aes(fill=r ),colour="white")+scale_fill_gradient(low="seagreen4", high="violetred",       na.value="white")+geom_text(aes(fontface=2))+ylab("Years")+xlab("Years")+labs(fill="Correlation \nCoefficient (R)")+labs(title="Heatmap of Correlation Coefficient")+theme(axis.title.x=element_text(size=20), axis.title.y=element_text(size=20),axis.text.x=element_text(size=10), axis.text.y=element_text(size=10),plot.title=element_text(size=20))+theme_bw(base_size=20, base_family=2)+scale_x_discrete(labels=labelsx)+scale_y_discrete(labels=labelsy)+coord_flip()

########################################

Et voilà, vous obtiendrez un chouette graphique que celui-ci:

Diagramme deux dimensions R

Copyright © 2019 DATA\WAX

Theme by Anders NorenUp ↑