Développer Cartes thématiques géographiques avec R
-
12-09-2019 - |
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 .
La solution
Le code suivant m'a bien servi. Personnalisez-le un peu et vous avez terminé.
(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:
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 ().