2013-06-18 6 views
5

alle, sorry für stören, aber ich bin ziemlich neu mit r konfrontiert eine entscheidende difficuty: Ich möchte eine animierte Karte von Russin mit Veränderungen in der Arbeitslosigkeit mit verschiedenen Jahren, wie erstellen. Zunächst lese ich hier einige Themen, darunter Creating a Movie from a Series of Plots in R, obwohl ich es immer noch nicht richtig machen kann. Was ich als Ergebnis haben möchte, ist eine animierte Karte wie here, aber mit Arbeitslosigkeit, wie ich es für ein Jahr gemacht habe! enter image description here Hier ist der Code:animierte gadm map in R

require(sp) 
require(maptools) 
require(RColorBrewer) 
require(rgdal) 
rus<-url("http://www.filefactory.com/file/4h1hb5c1cw7r/n/RUS_adm1_RData") 
print(load(rus)) 





    unempl1 <- read.delim2(file="C:\\unempl11.txt", header = TRUE, 
     sep = ";",quote = "", dec=",", stringsAsFactors=F) 
unempl2<- read.delim2(file="C:\\unempl12.txt", header = TRUE, 
     sep = ";",quote = "", dec=",", stringsAsFactors=F) 

gadm_names <-gadm.prj$NAME_1 


total <- length(gadm_names) 
pb <- txtProgressBar(min = 0, max = total, style = 3) 

order <- vector() 

for (i in 1:total){ 

    order[i] <- agrep(gadm_names[i], unempl1$region, 
        max.distance = 0.2)[1] 
setTxtProgressBar(pb, i)    # update progress bar 
} 


for (l in 1:total){ 

    order[l] <- agrep(gadm_names[l], unempl2$region, 
        max.distance = 0.2)[1] 
setTxtProgressBar(pb, i)    # update progress bar 
} 

col_no_1 <- as.factor(as.numeric(cut(unempl1$data[order], 
        c(0,2.5,5,7.5,10,15,100)))) 

col_no_2<- as.factor(as.numeric(cut(unempl2$data[order], 
        c(0,2.5,5,7.5,10,15,100)))) 


levels(col_no_1) <- c("<2,5%", "2,5-5%", "5-7,5%", 
        "7,5-10%", "10-15%", ">15%") 


gadm.prj$col_no_1 <- col_no_1 

myPalette1<-brewer.pal(6,"Purples") 


levels(col_no_2) <- c("<2,5%", "2,5-5%", "5-7,5%", 
        "7,5-10%", "10-15%", ">15%") 


gadm.prj$col_no_2 <- col_no_2 

myPalette2<-brewer.pal(6,"Purples") 




proj4.str <- CRS("+init=epsg:3413 +lon_0=105") 
gadm.prj <- spTransform(gadm, proj4.str) 

spplot(gadm.prj, "col_no", col=grey(.9), col.regions=myPalette, 
main="Unemployment in Russia by region") 

Es tut uns so ist, nicht zu verstehen, aber ich brauche wirklich eine Hilfe. Vielen Dank im Voraus!

Here is data to be able to reproduce the code

New Code, die ich folgenden Rat versucht, mit

library(sp) 
library(rgdal) 
library(spacetime) 
library(animation) 
rus <- url("http://www.filefactory.com/file/4h1hb5c1cw7r/n/RUS_adm1_RData") 
load(rus) 
proj4.str <- CRS("+init=epsg:3413 +lon_0=105") 
gadm.prj <- spTransform(gadm, proj4.str) 
N <- nrow(gadm.prj) 
pols <- geometry(gadm.prj) 
nms<-gadm$NAME_1 
vals1 <- read.csv2("C:\\unempl11.txt") 
ord1 <- match(nms, vals1$region) 
vals1 <- vals1[ord1,] 

vals2 <- read.csv2("C:\\unempl12.txt") 
ord2 <- match(nms, vals2$region) 
vals2 <- vals2[ord2,] 

nDays <- 2 
tt <- seq(as.Date('2011-01-01'), by='year', length=nDays) 
vals <- data.frame(rbind(vals1, vals2)) 

gadmST <- STFDF(pols, time=tt, data=vals) 



stplot(gadmST, animate=1, do.repeat=FALSE) 

New corrected data

Antwort

1

Das spacetime Paket definiert die stplot Methode mit mehreren grafischen Alternativen. Verwenden Sie das Argument animate, um eine Animation zu erstellen. Zuerst müssen Sie ein STFDF Objekt definieren (lesen Sie das Paketdokumentation und this paper für weitere Details)

Zuerst importieren Sie Ihre SpatialPolygonsDataFrame ...:

library(sp) 
library(rgdal) 
library(spacetime) 

rus <- url("http://www.filefactory.com/file/4h1hb5c1cw7r/n/RUS_adm1_RData") 
load(rus) 
proj4.str <- CRS("+init=epsg:3413 +lon_0=105") 
gadm.prj <- spTransform(gadm, proj4.str) 
N <- nrow(gadm.prj) 
pols <- geometry(gadm.prj) 

... und dann Ihre Daten hinzufügen (zwei Tage). Sie müssen die data.frame mit den Codes der SpatialPolygon neu anordnen.

vals1 <- read.csv2('/tmp/unempldata/unempl11.txt') 
ord1 <- match(nms, vals1$region) 
vals1 <- vals1[ord1,] 

vals2 <- read.csv2('/tmp/unempldata/unempl12.txt') 
ord2 <- match(nms, vals2$region) 
vals2 <- vals2[ord2,] 

Leider sind die Regionsnamen Ihrer Daten entsprechen nicht genau mit den Regionsnamen der Polygone. Daher wird der vorherige Code data.frame mit weniger Zeilen als Polygone bereitstellen, und der nächste Code wird fehlschlagen. Sie können Ihre Daten reinigen wollen, bevor Sie diesen Code mit (lesen Sie die STFDF Hilfeseite zu verstehen, wie gadmST definieren):

nDays <- 2 
tt <- seq(as.Date('2013-01-01'), by='day', length=nDays) 
vals <- data.frame(unempl=rbind(vals1, vals2)[,-1]) 

gadmST <- STFDF(pols, time=tt, data=vals) 

Jetzt sind Sie für die Animation bereit. Lesen Sie die stplot Hilfeseite die grafische Ausgabe mit seinen Argumenten zu verbessern:

png('gadm%02d.png') 
stplot(gadmST, animate=1, do.repeat=FALSE) 
dev.off() 

Die png Dateien sind die Bilder eines Films, der mit ffmpeg hergestellt werden kann.

+0

Vielen Dank für Ihre Antwort, aber ich frage mich, wie kann ich hier mehrere, ziemlich unabhängige Gadm Plots, Schleife? Ich fügte die oben genannten Daten zu Eilen Reproduktion hinzu –

+0

@RuvinRafailov stplot macht die Schleife für Sie. Ich habe den Code bearbeitet, um zu zeigen, wie man die Bilder und eine Filmdatei erzeugt. –

+0

Entschuldigung, für meine blöden Fragen, aber das ist das erste Mal, dass ich mit R arbeite, geschweige denn Geodaten, aber was ich nicht verstehen kann ist, wie ich meine Arbeitslosenzahlen in deinen Code einfüge.Ich habe die Hauptfrage bearbeitet, die zeigt, wie ich Daten für 2 Jahre benutzt habe, habe aber keine Ahnung, wie ich sie mit deiner Methode animiere. –