Pergunta

Há claramente uma série de pacotes em R para todos os tipos de análise espacial. Que podem por visto na CRAN Task Ver: Análise de Dados Espaciais . Estes pacotes são numerosas e diversas, mas tudo que eu quero fazer é algumas simples mapas temáticos . Tenho dados com códigos de condado e estado FIPS e eu tenho arquivos ESRI Shape de limites do condado e estaduais e os que acompanham FIPS códigos que permite juntar com os dados. Os arquivos de forma poderia ser facilmente convertido em outros formatos, se necessário.

Então, qual é o caminho a seguir mais direto para criar mapas temáticos com R?

Este mapa parece que foi criado com um produto ESRI Arc, mas este é o tipo de coisa que eu gostaria de fazer com R:

alt texto http://www.infousagov.com/images/choro.jpg Mapa copiado do aqui .

Foi útil?

Solução

O código a seguir me serviu bem. Personalizá-lo um pouco e está feito. text alt
(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))

função 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 it

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

Outras dicas

Pensamento eu gostaria de acrescentar alguma informação nova aqui uma vez que houve alguma atividade em torno deste tema desde a postagem. Aqui estão dois grandes links para "mapa coroplético R Challenge" sobre as revoluções no blog:

mapa coroplético R Desafio

choropleth Desafio Resultados

Esperamos que estes são úteis para as pessoas que visualizaram este pergunta.

Todo o melhor,

Jay

Confira os pacotes

library(sp)
library(rgdal)

que são agradáveis ??para dados geográficos, e

library(RColorBrewer)  

é útil para colorir. Este mapa é feito com os pacotes acima e este código:

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" é um shapefile e "Veg" é a variável exibida. provavelmente pode ser feito melhor com um pouco de trabalho. I don`t parecem ser permitido fazer upload de imagem, aqui está um link para a imagem:

Dê uma olhada no pacote PBSmapping (veja borh a vinheta / manual e demo) e este O'Reilly Data Mashups em R artigo (infelizmente não é a título gratuito, mas vale a pena 4,99 $ para download, de acordo revoluções blogue ).

É apenas três linhas!

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

Feito !! Basta alterar a segunda linha para qualquer vetor de 63 elementos (cada elemento entre 0 e 657, que são membros de cores ())

Agora, se você quiser começar a fantasia, você pode escrever:

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

Os 63 elementos representam as regiões 63 cujos nomes você pode obter através da execução:

map("state")$names;

A Galeria Gráficos R tem um muito semelhante mapa que deveria para fazer um bom ponto de partida. O código está aqui: www.ai.rug.nl/~hedderik/R/US2004. Você precisa adicionar uma legenda com a função de legenda ().

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top