Frage

Es gibt eindeutig eine Reihe von Paketen in R für alle Arten von Raumanalyse. Das kann in der CRAN Aufgabenansicht: Analyse von Geodaten . Diese Pakete sind zahlreich und vielfältig, aber alles, was ich tun möchte, ist einige einfache thematische Karten . Ich habe Daten mit Landkreis und Staat FIPS-Codes und ich habe ESRI Shape-Dateien von Kreis- und Landesgrenzen und den begleitenden FIPS-Codes, die mit den Daten ermöglicht verbinden. Die Shape-Dateien leicht in andere Formate umgewandelt werden könnte, wenn nötig.

Also, was ist der direkteste Weg, thematische Karten mit R zu schaffen?

Diese Karte sieht aus wie es mit einem ESRI Arc Produkt erstellt wurde, aber das ist die Art der Sache, würde Ich mag mit R tun:

alt text http://www.infousagov.com/images/choro.jpg Karte von hier kopiert.

War es hilfreich?

Lösung

Der folgende Code hat mich gut bedient. Gestaltet es ein wenig und du bist fertig. alt text
(Quelle: 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))

Heatmap Funktion

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 es

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

Andere Tipps

Ich dachte, ich würde ein paar neue Informationen hier hinzufügen, da es einige Aktivität seit der Entsendung um dieses Thema war. Hier sind zwei große Links zu „Choroplethenkarte R Herausforderung“ auf der Revolutionen Blog:

Choroplethenkarte R Challenge-

Choropleth Challenge-Ergebnisse

Hoffentlich sind diese nützlich für Menschen, diese Frage zu sehen.

Alles Gute,

Jay

die Pakete Check out

library(sp)
library(rgdal)

, die für Geodaten sind nett, und

library(RColorBrewer)  

ist nützlich für die Färbung. Diese Karte wird mit den oben genannten Paketen und diesem Code gemacht:

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" ist eine Shape-Datei und "Veg" ist die Variable angezeigt. Kann wahrscheinlich mit einer wenig Arbeit besser gemacht werden. I don `t zu dürfen, scheinen Bild hochzuladen, hier ist ein Link zu dem Bild:

Werfen Sie einen Blick auf dem PBSmapping-Paket (siehe Born die Vignette / Handbuch und Demo) und diese O'Reilly Daten Mashups in R Artikel (leider ist es nicht kostenlos, aber es wert $ 4,99 zum Download, nach Revolutions Blog ).

Es ist nur drei Zeilen!

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

Fertig !! ändern, nur die zweite Zeile auf jeden Vektor von 63 Elementen (jedes Element zwischen 0 und 657, welche Mitglieder der Farben sind ())

Wenn Sie nun Lust bekommen möchten Sie schreiben können:

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

Die 63 Elemente stellen die 63 Regionen, deren Namen man durch Laufen bekommen:

map("state")$names;

Die R Grafik-Galerie hat eine sehr ähnliche Karte die sollte sorgt für einen guten Ausgangspunkt. Der Code ist hier: www.ai.rug.nl/~hedderik/R/US2004. Sie müssen eine Legende mit der Legende () Funktion hinzuzufügen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top