Domanda

Ci sono chiaramente una serie di pacchetti in R per tutti i tipi di analisi spaziale. Che può dal visto nel CRAN Task Vista: Analisi dei dati spaziali . Questi pacchetti sono numerose e diverse, ma tutto quello che voglio fare è qualche semplice carte tematiche . Ho dati con contea e codici di stato FIPS e ho shape file ESRI della contea e statali confini e codici FIPS accompagnamento che permette di giunzione con i dati. I file di forma possono essere facilmente convertiti in altri formati, se necessario.

Allora, qual è la via da seguire più diritta per creare mappe tematiche con R?

Questa mappa sembra che è stato creato con un prodotto ESRI Arc, ma questo è il tipo di cosa che vorrei fare con R:

alt text http://www.infousagov.com/images/choro.jpg Mappa copiato da qui .

È stato utile?

Soluzione

Il seguente codice mi ha servito bene. Personalizzare un po 'e si è fatto. alt text
(fonte: 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))

funzione 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")
}

plot è

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

Altri suggerimenti

Ho pensato che vorrei aggiungere alcune nuove informazioni qui in quanto non v'è stata una certa attività intorno a questo argomento in quanto il distacco. Qui ci sono due ottimi collegamenti per "mappa coropletica R Sfida" sul blog Revolutions:

mappa coropletica R Sfida

choropleth Sfida Risultati

Speriamo che queste sono utili per le persone che hanno visionato questo domanda.

Tutto il meglio,

Jay

Scopri i pacchetti

library(sp)
library(rgdal)

che sono bello per geodati, e

library(RColorBrewer)  

è utile per la colorazione. Questa mappa è fatto con i pacchetti di cui sopra e questo codice:

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" è uno shapefile e "Veg" è la variabile visualizzata. Probabilmente può essere fatto meglio con un po 'di lavoro. I don `t sembra di essere autorizzati a caricare l'immagine, qui è un collegamento all'immagine:

Date un'occhiata al pacchetto PBSmapping (vedi borh la vignetta / manuale e la demo) e questo O'Reilly Dati mashup in R articolo (purtroppo non è così gratuitamente, ma ne vale la pena 4,99 $ per il download, secondo Le rivoluzioni blog ).

E 'solo tre righe!

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

Fatto !! Basta cambiare la seconda linea per ogni vettore di 63 elementi (ogni elemento tra 0 e 657, che sono membri di colori ())

Ora, se si vuole ottenere di fantasia si può scrivere:

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

Le 63 elementi rappresentano le regioni 63 i cui nomi si può ottenere in esecuzione:

map("state")$names;

La R Graphics Galleria ha un simile mappa che dovrebbe per fare un buon punto di partenza. Il codice è qui: www.ai.rug.nl/~hedderik/R/US2004. Avresti bisogno di aggiungere una legenda con la funzione leggenda ().

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top