Vous êtes sur la page 1sur 14

Créer sa carte géographique avec R

jeu 28 Mai 2015 m4rsuAstuce, Didacticiel 7

Aujourd’hui je vais vous montrer comment, en utilisant R, on peut faire de belles cartes
géographiques.

Et là, vous allez me demander, mais pourquoi faire des cartes géographiques ? Et pourquoi
avec R ?

Et bien imaginons que, vous, bioinformaticien de terrain, soyez allé échantillonner des
animaux à l’autre bout du monde sur plusieurs sites, par exemple des Marsupilami (totalement
au hasard !). Vous voulez faire une carte de ces différents sites d’échantillonnage.

Facile ! Il suffit d’utiliser Google Earth, et d’y ajouter les points me direz-vous.

Oui, mais voilà, vous avez 500 points d’échantillonnage. Et 500, ça commence à faire
beaucoup à faire à la main… Et puis votre chef étant un ayatollah du libre, vous venez d’être
viré par le simple fait d’y avoir pensé !

Et le gros avantage d’utiliser R sera de pouvoir utiliser toutes ses fonctions graphiques sur
votre carte (et puis c'est libre !). Nous verrons, à la fin de cet article, comment ajouter des
graphiques sur une carte.

Pour faire une simple carte, on va utiliser les packages maps[1] et mapdata[2]. Une fois
installés, nous utiliserons la fonction map() pour créer notre carte. Nous utiliserons les
données de la base de données worldHires fournie dans le package mapdata.

Le code suivant donne une carte du monde.

libra ry(ma ps )
libra ry(ma pda ta )

ma p('worldHire s ')

1 library(maps)
2 library(mapdata)
3
4 map('worldHires')
Les options graphiques de R peuvent s’appliquer. On peut choisir de ne dessiner qu'une partie
du monde en utilisant les options xlim et ylim respectivement pour régler la longitude et la
latitude. Il faut donc connaître les coordonnées géographique des quatre coins de la carte qui
nous intéresse (elles peuvent être trouvées grâce à la fonction locator() de R). L’option color
permettra de modifier la couleur des frontières entre pays, et utilisée avec l’option fill, on
pourra colorier les pays.

ma p('worldHire s ', col=ra inbow(18), fi

1 map('worldHires', col=rainbow(18), fill=T, xlim=c(-19,60), ylim=c(-40,40))


Ouais, mais c’est chiant ton truc. Il faut connaître les coordonnées géographiques dans le
système décimal pour dessiner la carte. On ne peut pas demander le pays que l’on veut ?

Et si ! On peut spécifier le pays que l’on veut dessiner. Par exemple, la commande suivante
permet de dessiner une carte du Japon avec un fond grisé.

ma p('worldHire s ', "ja pa n", col='gra y

1 map('worldHires', "japan", col='gray80', fill=T)


Puisqu’une carte sans échelle ne veut rien dire (comment j’ai bien retenu mes cours de
géographie du collège !), on utilisera la fonction map.scale() pour l’ajouter.

On peut ensuite ajouter les villes sur cette carte, grâce à la fonction map.cities().

On pourra ensuite ajouter des points sur la carte à partir des coordonnées géographiques. Il
faudra alors disposer de ces coordonnées géographiques dans le système décimal. Si vous
avez les coordonnées dans le système sexagésimal, vous pouvez les convertir, par exemple sur
ce site : https://tools.wmflabs.org/geohack/

Les coordonnées de Kyoto dans le système sexagésimal sont 35°40’14.6“N, 139°46’18.86“E


(merci Wikipedia : https://fr.wikipedia.org/wiki/kyoto). Ces coordonnées donnent dans le
système décimal : 35.670724°N pour la latitude et 139.771907°E pour la longitude.

ma p('worldHire s ', "ja pa n", col='gra y


ma p.s ca le (134,26,me tric=T, re lwidth=
ma p.citie s (country='J a pa n', ca pita ls
points (135.7, 35, pch=16)
1 map('worldHires', "japan", col='gray80', fill=T)
2 map.scale(134,26,metric=T, relwidth=0.3)
3 map.cities(country='Japan', capitals=1, pch=15, col='red')
4 points(135.7, 35, pch=16)
5 text(135.7, 35.3, label="Kyoto")
6 points(140.5, 37.8, pch=16)
7 text(140.5, 38.2, label="Fukushima")

Je vois d'ici les petits malins qui ont voulu, pour tester, faire une belle carte de la France
métropolitaine, et qui n'ont pas été super contents du résultat…

En effet la commande map("worldHires", "france") représente la France… en entier ! Donc


avec les DOM-TOM (enfin les DROM-COM pour ceux qui ont suivi les changements
d'acronymes).

Il faudra donc, dans le cas de la France métropolitane, passer obligatoirement par les
coordonnées géographiques :
ma p("worldHire s ", "fra nce ", xlim=c(-5

1 map("worldHires", "france", xlim=c(-5,10), ylim=c(35,55))

Maintenant revenons à nos marsupilamis. On va réaliser une carte de leur aire de répartition
sur laquelle on ajoutera les points d’échantillonnage. Pour les aires de répartition d’une
espèce, il est "assez facile" de trouver des données sur internet sous forme de shapefile (.shp)
qui sont ceux que l’on utilise pour faire une carte.

On représente les aires de répartition de deux types de population de la même espèce de


marsupilami (Marsupilami fantasii) : les marsupilamis jaunes à tâches (dont l'aire de
répartition est représentée en vert) et les marsupilamis jaunes uniformes (en rouge). Sur la
carte, on voit que les deux populations cohabitent sur une aire géographique limitée.

libra ry(ma ptools )


re pa rtition = re a dSha pe Poly('./re pa r
ma p('worldHire s ', xlim=c(-90,-35), ylim
plot(re pa rtition[55,], a dd=TRUE, col=

library(maptools)
1 repartition = readShapePoly('./repartition_marsu.shp’)
2 map('worldHires', xlim=c(-90,-35), ylim=c(-60,15))
3 plot(repartition[55,], add=TRUE, col=rgb(20,84,30,150,maxColorValue=255),
4 border=FALSE)
5 plot(repartition[84,], add=TRUE, col=rgb(201,21,34,150,maxColorValue=255),
border=FALSE)
Pour faire cette carte, j’ai importé une nouvelle libraire (maptools) dans laquelle se trouve la
fonction readShapePoly() qui permet d’ouvrir des fichiers « de forme ». J’ai récupéré le
fichier concernant les "caecilian amphibians"[3] (mais ! On bossait pas sur le marsupilami ?!)
sur le site de l’UICN Red List (Liste rouge des espèces en danger)[4]. Une fois ouvert avec R,
vous devriez obtenir une data frame contenant une aire de répartition par ligne (et j'ai bien
galéré à en trouver deux qui se recoupent).

Une légende pourrait être ajoutée en utilisant la fonction legend() de R.

Maintenant intéressons-nous en particulier à la zone où les deux populations cohabitent. Sur


cette carte, j’ai ajouté les treize points d’échantillonnage dans cette région (dont sept dans la
zone de cohabitation). On peut ajouter ces points grâce à la fonction points() en ayant au
préalable importé le fichier csv qui les contient.

Pour zoomer, j’ai cherché les coordonnées des quatre points les plus, respectivement, au nord,
à l’ouest, au sud et à l’est de la zone qui m’intéresse grâce à la fonction locator() de R.
ma p('worldHire s ', xlim=c(-65.5,-50), y
plot(re pa rtition[84,], a dd=TRUE, col=
plot(re pa rtition[55,], a dd=TRUE, col=
points (coord$x, coord$y, pch=16)

map('worldHires', xlim=c(-65.5,-50), ylim=c(-14,-8))


1 plot(repartition[84,], add=TRUE, col=rgb(201,21,34,150,maxColorValue=255),
2 border=FALSE)
3 plot(repartition[55,], add=TRUE, col=rgb(20,84,30,150,maxColorValue=255),
4 border=FALSE)
points(coord$x, coord$y, pch=16)

C’est bien beau d’échantillonner des bestioles sur le terrain, mais normalement, on
n'échantillonne pas pour le plaisir d'échantillonner, mais pour faire quelque chose avec cet
échantillonnage… On a donc séquencé le cytochrome b des différents individus
échantillonnés dans ces différentes populations, ce qui nous a permis d’identifier huit
haplotypes différents.

Hey m4rsu ! On pourrait pas faire une représentation des différents haplotypes identifiés sur
chaque site et leur fréquence, genre avec un camembert ?

J'allais justement y venir !

On peut donc ajouter des graphiques en camembert sur une carte grâce à la fonction
draw.pie() qui est fournie avec la librarie mapplots. Il faut disposer d’un fichier qui comporte
quatre colonnes : longitude, latitude, haplotype, nombre d’observations. On pourra alors
utiliser la fonction make.xyz() qui créée automatiquement un objet utilisable dans la fonction
draw.pie().

libra ry(ma pplots )


xyz = ma ke .xyz(ha plotype s $x, ha plo
ma p('worldHire s ', xlim=c(-65.5,-50), y
plot(re pa rtition[84,], a dd=TRUE, col=

1 library(mapplots)
2 xyz = make.xyz(haplotypes$x, haplotypes$y, haplotypes$freq, haplotypes$haplo)
3 map('worldHires', xlim=c(-65.5,-50), ylim=c(-14,-8))
4 plot(repartition[84,], add=TRUE, col=rgb(201,21,34,150,maxColorValue=255),
5 border=FALSE)
plot(repartition[55,], add=TRUE, col=rgb(20,84,30,150,maxColorValue=255),
6 border=FALSE)
7 draw.pie(xyz$x, xyz$y, xyz$z, radius=0.3, col=rainbow(8))
legend('topright', legend=c(1:8), col=rainbow(8), pch=15, ncol=2)

Tadaa ! Bon, je vous laisse faire l’interprétation (bon courage, j'ai inventé les données !), car
ce n’est pas l’objet de cet article.

Nous avons donc vu comment faire des cartes avec R. N’étant pas un spécialiste, je vous ai
montré quelques possibilités, mais il y en a plein d’autres, et je suis sûr que l’on peut faire des
cartes bien plus belles que celles que j’ai montrées ici. Il existe plein d'autres librairies pour
faire des cartes, vous devriez y trouver votre bonheur !

Pour finir, je voudrais préciser qu’aucun marsupilami n’a été maltraité pour écrire cet article.
En plus, c'est un gros fake : tout le monde sait que les marsupilamis vivent dans la forêt
palombienne et non amazonienne.

Merci à mathurin, hedjour, Olivier Dameron et Sylvain P. pour leurs précieux conseils et la
relecture de cet article. Merci également à Kim Gilbert pour son article "Making maps with
R"[5] qui m'a bien aidé à mes débuts avec les cartes.

Références

[1] Package maps : http://cran.r-project.org/web/packages/maps/

[2] Package mapdata : http://cran.r-project.org/web/packages/mapdata/index.html

[3] : shapefile des Caecilian Amphibians (ou Gymnophonia) : http://goo.gl/OFGYl1

[4] : IUCN Red List http://www.iucnredlist.org/technical-documents/spatial-data

[5] : Making map with R : http://www.molecularecologist.com/2012/09/making-maps-with-r/

Partager :

 Cliquez pour partager sur Twitter(ouvre dans une nouvelle fenêtre)


 Cliquez pour partager sur Facebook(ouvre dans une nouvelle fenêtre)
 Cliquez pour partager sur LinkedIn(ouvre dans une nouvelle fenêtre)
 Cliquez pour partager sur Google+(ouvre dans une nouvelle fenêtre)
 Cliquez pour envoyer par e-mail à un ami(ouvre dans une nouvelle fenêtre)

Articles similaires

Cours de R pour débutant pressé (introduction)

mer 19 Sep 2012

Dans "Suivez l'guide"

Ce qu'il faut voir sur une carte de contact chromosomique

mer 16 Nov 2016


Dans "Didacticiel"

Nextflow, pour votre prochain pipeline ?

mer 23 Nov 2016

Dans "Découverte"

 À propos de m4rsu
 Issu du master de bioinformatique de l'université Paris Diderot, j'ai réalisé une thèse en
génomique des populations chez le poisson aveugle Astyanax mexicanus. Ancien
président (2014-2017) de l'association des Jeunes Bioinformaticiens de France (RSG
France - JeBiF), je suis membre du conseil de la SFBI depuis juillet 2015.
@julienfumey

Catégorie: Astuce, Didacticiel | Tags: carte géographique, R


S'abonner au flux de commentaires de cet article

7 commentaires sur “Créer sa carte géographique avec R”

1.

Billy Mandresy

septembre 1, 2015 à 7:11

Super!!! Tout simplement super! Merci du partage.

Répondre
2.

Med

octobre 3, 2015 à 10:17

Bonsoir, svp je voudrais construire des graphe à partir des données de Genre
production cerialire dans le monde avec R ms je sais pas comment faire
pourriez vous m\'aidez c urgent
merci
lien http://donnees.banquemondiale.org/indicateur/AG.YLD.CREL.KG
je prends que 8 pays de 2000 à 2013

Répondre

3.

pol

novembre 9, 2015 à 1:10

Merci!

Répondre

4.

Pierre Raymond

avril 18, 2016 à 12:29

Bonsoir Mr.
J\'ai bien apprécié votre article. Vous êtes un très bon pédagogue.
Cependant, vous n\'avez pas abordé mon souci.
Je vous l\'expose dans l\'espoir d\'une suite favorable.
En effet, pouvez vous faire la carte du marché commun COMESA c\'est -à-dire ma
mise en commun des cartes des pays qui composent COMESA?
Prière m\'indiquer toutes les étapes, les packages et les codes R.
Merci
Pierre
Répondre

5.

HedJour

avril 18, 2016 à 1:39

Vous voulez aussi que l\'on vous écrive tout le code ?


Pour ça il vous faut le formulaire A39...
Pour des réponses spécifique en français sur R c\'est par ici (clic)

Répondre

6.

Denis

avril 12, 2017 à 4:15

Bonjour,

Pour créer facilement une carte, j\'utilise cet outil de data-viz :


https://makeyourmap.cc/fr/

Il est totalement gratuit et en 5 clics il est facile de réaliser une carte avec ses propres
données excel ou avec des données en open-source.

Je vous le recommande si vous ne souhaitez pas perdre de temps avec des outils
compliqués!

Répondre

7.

!!:;;:; ç_èè-((''"

avril 9, 2018 à 10:32

Bonjour
j\'ai apprécié votre enseignement. Mais je voulais savoir comment dessiner la carte du
BURUNDI.

Répondre

Laisser un commentaire

Vous aimerez peut-être aussi