web-dev-qa-db-fra.com

Développement de cartes thématiques géographiques avec R

Il existe clairement un certain nombre de packages dans R pour toutes sortes d'analyses spatiales. Cela peut être vu dans le Vue des tâches CRAN: Analyse des données spatiales . Ces packages sont nombreux et divers, mais tout ce que je veux faire, c'est quelques simples cartes thématiques . J'ai des données avec le comté et l'état FIPS codes et j'ai des fichiers de forme ESRI des frontières du comté et de l'état et les codes FIPS FIPS qui permettent de se joindre aux données). Les fichiers de forme peuvent être facilement convertis en d'autres formats, si nécessaire.

Alors, quelle est la façon la plus simple de créer des cartes thématiques avec R?

Cette carte semble avoir été créée avec un produit ESRI Arc, mais c'est le type de chose que j'aimerais faire avec R:

texte alternatif http://www.infousagov.com/images/choro.jpg Carte copié d'ici .

58
JD Long

Le code suivant m'a bien servi. Personnalisez-le un peu et vous avez terminé. alt text
(source: eduardoleoni.com )

library(maptools)
substitute your shapefiles here
state.map <- readShapeSpatial("BRASIL.shp")
counties.map <- readShapeSpatial("55mu2500gsd.shp")
## this is the variable we will be plotting
counties.map@data$noise <- rnorm(nrow(counties.map@data))

fonction heatmap

plot.heat <- function(counties.map,state.map,z,title=NULL,breaks=NULL,reverse=FALSE,cex.legend=1,bw=.2,col.vec=NULL,plot.legend=TRUE) {
  ##Break down the value variable
  if (is.null(breaks)) {
    breaks=
      seq(
          floor(min(counties.map@data[,z],na.rm=TRUE)*10)/10
          ,
          ceiling(max(counties.map@data[,z],na.rm=TRUE)*10)/10
          ,.1)
  }
  counties.map@data$zCat <- cut(counties.map@data[,z],breaks,include.lowest=TRUE)
  cutpoints <- levels(counties.map@data$zCat)
  if (is.null(col.vec)) col.vec <- heat.colors(length(levels(counties.map@data$zCat)))
  if (reverse) {
    cutpointsColors <- rev(col.vec)
  } else {
    cutpointsColors <- col.vec
  }
  levels(counties.map@data$zCat) <- cutpointsColors
  plot(counties.map,border=gray(.8), lwd=bw,axes = FALSE, las = 1,col=as.character(counties.map@data$zCat))
  if (!is.null(state.map)) {
    plot(state.map,add=TRUE,lwd=1)
  }
  ##with(counties.map.c,text(x,y,name,cex=0.75))
  if (plot.legend) legend("bottomleft", cutpoints, fill = cutpointsColors,bty="n",title=title,cex=cex.legend)
  ##title("Cartogram")
}

tracer

plot.heat(counties.map,state.map,z="noise",breaks=c(-Inf,-2,-1,0,1,2,Inf))
59
Eduardo Leoni

J'ai pensé ajouter de nouvelles informations ici car il y a eu une certaine activité autour de ce sujet depuis la publication. Voici deux excellents liens vers "Choropleth Map R Challenge" sur le blog Revolutions:

Défi de la carte R de choroplèth

Résultats du défi choroplèth

J'espère que ces informations sont utiles aux personnes qui consultent cette question.

Bonne chance,

Geai

17
Jay

Découvrez les packages

library(sp)
library(rgdal)

qui sont agréables pour les géodonnées, et

library(RColorBrewer)  

est utile pour la coloration. Cette carte est faite avec les packages ci-dessus et ce code:

VegMap <- readOGR(".", "VegMapFile")
Veg9<-brewer.pal(9,'Set2')
spplot(VegMap, "Veg", col.regions=Veg9,
 +at=c(0.5,1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5),
 +main='Vegetation map')

"VegMapFile" est un fichier de formes et "Veg" est la variable affichée. Peut probablement être mieux fait avec un peu de travail. Je ne semble pas être autorisé à télécharger l'image, voici un lien vers l'image:

11
Ehva

Jetez un œil au package PBSmapping (voir borh la vignette/manuel et la démo) et this O'Reilly Data Mashups in R article (malheureusement ce n'est pas gratuit gratuit mais cela vaut 4,99 $ à télécharger, selon Revolutions blog ).

4
Paolo

Ce ne sont que trois lignes!

library(maps);
colors = floor(runif(63)*657);
map("state", col = colors, fill = T, resolution = 0)

Terminé!! Modifiez simplement la deuxième ligne en n'importe quel vecteur de 63 éléments (chaque élément compris entre 0 et 657, qui sont membres de couleurs ())

Maintenant, si vous voulez devenir chic, vous pouvez écrire:

library(maps);
library(mapproj);
colors = floor(runif(63)*657);
map("state", col = colors, fill = T, projection = "polyconic", resolution = 0);

Les 63 éléments représentent les 63 régions dont vous pouvez obtenir les noms en exécutant:

map("state")$names;
4
Pooya

La galerie graphique R a un très carte similaire qui devrait constituer un bon point de départ. Le code est ici: www.ai.rug.nl/~hedderik/R/US2004. Vous auriez besoin d'ajouter une légende avec la fonction legend ().

3
David Smith