Opracowywanie geograficznych map tematycznych z R

W R jest wyraźnie wiele pakietów do wszelkiego rodzaju analizy przestrzennej. Które można zobaczyć w widoku zadania CRAN: Analiza danych przestrzennych . Te pakiety są liczne i różnorodne, ale chcę tylko zrobić kilka prostych map tematycznych . Posiadam dane z kodami FIPS Hrabstwa i stanu oraz pliki kształtu ESRI granic hrabstwa i stanu oraz towarzyszące im kody FIPS, które umożliwiają łączenie się z danymi. Pliki kształtów można łatwo konwertować na inne formaty, w razie potrzeby.

Jaki jest najbardziej prosty sposób tworzenia map tematycznych za pomocą R?

Ta mapa wygląda tak, jakby została stworzona z produktem ESRI Arc, ale jest to coś, co chciałbym zrobić z R:

Alt text http://www.infousagov.com/images/choro.jpg Mapa skopiowana stąd .

Author: JD Long, 2009-08-11

6 answers

Poniższy kod dobrze mi służył. Dostosuj go trochę i gotowe. alt text http://files.eduardoleoni.com/map.png

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))

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

Wykreśl to

plot.heat(counties.map,state.map,z="noise",breaks=c(-Inf,-2,-1,0,1,2,Inf))
 59
Author: Eduardo Leoni,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-11 16:22:21

Pomyślałem, że dodam tu nowe informacje, ponieważ od czasu opublikowania było trochę aktywności wokół tego tematu. Oto dwa świetne linki do "Choropleth Map R Challenge"na blogu Revolutions:

Choropleth Map R Challenge

Wyniki Zawodów Choropleth

Mam nadzieję, że są one przydatne dla osób oglądających to pytanie.

Wszystkiego najlepszego,

Jay

 17
Author: Jay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-24 02:08:09

Zobacz pakiety

library(sp)
library(rgdal)

Które są ładne dla geodata, i

library(RColorBrewer)  

Jest przydatny do barwienia. Ta mapa jest wykonana z powyższych pakietów i tego kodu:

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" jest plikiem kształtu i "Veg" jest wyświetlaną zmienną. Można to zrobić lepiej przy odrobinie pracy. Wydaje mi się, że nie wolno mi wgrać obrazka, oto link do obrazka:

 11
Author: Ehva,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-06 00:19:48

Zerknij na pbsmapping (patrz borh the vignette / manual oraz demo) i Ten O ' Reilly Mashup danych w R artykuł (niestety nie jest bezpłatny, ale jest wart 4.99$ do pobrania, według Revolutions blog ).

 4
Author: Paolo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-11 15:41:36

To tylko trzy linijki!

library(maps);
colors = floor(runif(63)*657);
map("state", col = colors, fill = T, resolution = 0)
Zrobione!! Po prostu zmień drugą linię na dowolny wektor 63 elementów (każdy element między 0 a 657, które są członkami colors ())

Teraz, jeśli chcesz nabrać fantazji, możesz napisać:

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

63 elementy reprezentują 63 regiony, których nazwy można uzyskać uruchamiając:

map("state")$names;
 4
Author: Pooya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-03 21:15:11

Galeria Grafiki R ma bardzo podobną mapę, która powinna być dobrym punktem wyjścia. Kod jest tutaj: www.ai.rug.nl ~ hedderik / użytkownik Musisz dodać legendę za pomocą funkcji legend ().

 3
Author: David Smith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-11 15:31:53