Question

Il y a clairement un certain nombre de paquets dans R pour toutes sortes d'analyse spatiale. Cela peut par vu dans le CRAN Tâche Vue: Analyse des données spatiales . Ces forfaits sont nombreux et variés, mais tout ce que je veux faire est un peu simple, cartes thématiques . J'ai données avec le comté et l'état FIPS codes et j'ai des fichiers de forme de Esri limites du comté et de l'État et les codes FIPS d'accompagnement qui permet de joindre les données. Les fichiers de forme peuvent être facilement convertis en d'autres formats, en cas de besoin.

Alors, quelle est la voie la plus directe pour créer des cartes thématiques avec R?

Cette carte ressemble à elle a été créée avec un produit Arc Esri, mais c'est le genre de chose que je voudrais faire avec R:

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

Était-ce utile?

La solution

Le code suivant m'a bien servi. Personnalisez-le un peu et vous avez terminé. text alt
(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 le graphique

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

Autres conseils

Je pensais que je voudrais ajouter quelques nouvelles informations ici car il y a eu une certaine activité autour de ce sujet depuis l'affichage. Voici deux grands liens vers « choroplèthes Carte R Challenge » sur le blog révolutions:

choroplèthes Plan R Défi

choroplèthes Défi Résultats

Espérons que ceux-ci sont utiles pour personnes qui regardent cette question.

Cordialement,

Jay

Vérifiez les paquets

library(sp)
library(rgdal)

qui sont bien pour géodonnées et

library(RColorBrewer)  

est utile pour la coloration. Cette carte est faite avec les forfaits 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 shapefile et "Veg" est la variable affichée. Peut probablement faire mieux avec un peu de travail. I don `t semblent être autorisés à télécharger l'image, voici un lien vers l'image:

Jetez un oeil à l'ensemble de PBSmapping (voir la vignette Borh / manuel et la démo) et cette O'Reilly Données Mashups en R l'article (il est malheureusement pas gratuit mais il vaut 4,99 $ à télécharger, selon Blog révolutions ).

Il est à seulement trois lignes!

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

Fait !! Il suffit de changer la deuxième ligne à tout vecteur de 63 éléments (chaque élément compris entre 0 et 657, qui sont des membres de couleurs ())

Maintenant, si vous voulez obtenir la fantaisie, 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 les noms vous pouvez obtenir en cours d'exécution:

map("state")$names;

La R Galerie Graphics a une très carte similaire qui devrait faire 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 légende ().

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top