Cartographie avec ggplot2
mardi 2 novembre 2010 :: R :: Lien permanent
ggplot2
est une bibliothèque extrêmement puissante et de plus en plus populaire proposant un cadre unifié et une vraie logique pour la génération de graphiques sous R
. L'idée ici est d'utiliser cette bibliothèque pour représenter des données spatiales au-dessus d'une carte obtenue, par exemple, par l'importation d'un fichier shapefile, ou autres données utilisée's par la bibliothèque sp
.Pour plus d'informations sur ggplot2
:
Chargement des données
Notes : une bonne partie de cette section est tirée du wiki de ggplot2
:
https://github.com/hadley/ggplot2/wiki/plotting-polygon-shapefiles
On charge d'abord les bibliothèques nécessaires :
library(rgrs) require(rgdal) require(maptools) require(ggplot2) gpclibPermit()
Pour simplifier on utilise le fond de carte lyon
inclus avec rgrs
:
data(lyon)
On doit avant toute chose transformer l'objet lyon
en un ensmeble de points utilisables par ggplot2
. Pour cela on utilise le code suivant :
lyon@data$id <- rownames(lyon@data) lyon.points <- fortify.SpatialPolygonsDataFrame(lyon, region="id")
Carte de base
On peut maintenant stocker la carte de base, représentant nos polygones d'origine dans un graphique de type ggplot :
lyon.map <- ggplot() + geom_polygon(data=lyon.points, aes(long, lat, group=group), fill=NA, colour="black") + coord_map()
On peut afficher cette carte, la personnaliser, etc.
lyon.map
Représentations de données
Une fois qu'on a la carte de base, on peut très facilement ajouter des données en utilisant les fonctionnalités de ggplot2
.
Ici on génère aléatoirement une variable associée à des coordonnées de type latitude/longitude :
df <- data.frame(long=runif(10,4.78,4.88), lat=runif(10,45.72,45.8), val=runif(10,1,10))
Et on peut représenter ces données en ajoutant un geom_point
à la carte de base :
lyon.map + geom_point(data=df, aes(long, lat, size=val))
Et on peut évidemment personnaliser l'apparence de tout cela :
lyon.map + geom_point(data=df, aes(long, lat, size=val), fill="red", colour="white", shape=21) + scale_size(to=c(0,40),"Variable")