2013-06-18 21 views
5

wszystkim, przepraszam za zakłócanie, ale jestem całkiem nowy z r napotkał kluczową trudność: Chcę stworzyć animowaną mapę Russin ze zmianami w bezrobociu z różnymi latami, jak. Na początek przeczytałem kilka tematów, w tym: Creating a Movie from a Series of Plots in R, chociaż nie jestem w stanie zrobić tego poprawnie. To, co chcę mieć, to animowana mapa, taka jak here, ale z bezrobociem, tak jak robiłem to przez rok! enter image description here Oto kod:animowana mapa gadżetu w 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") 

Przepraszam za to, że taki nie rozumiejąc, ale naprawdę potrzebują pomocy. Z góry dziękuję!

Here is data to be able to reproduce the code

Nowy kod, który Próbowałem za pomocą następujące informacje

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

Odpowiedz

1

Pakiet spacetime definiuje metodę stplot z kilkoma alternatyw graficznych. Użyj argumentu animate do zbudowania animacji . Najpierw trzeba zdefiniować STFDF obiektu (zapoznać się z dokumentacją pakietu i this paper szczegóły)

najpierw zaimportować 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) 

... a następnie dodać swoje dane (dwa dni). Musisz zmienić kolejność data.frame z kodami SpatialPolygon.

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,] 

Niestety, nazwy regionie danych nie pasuje dokładnie z nazwiskami regionie wielokątów. Dlatego poprzedni kod zapewni data.frame mniej wierszy niż wielokątów, a następny kod zakończy się niepowodzeniem. Może chcesz wyczyścić dane przed użyciem tego kodu (przeczytaj stronę STFDF pomagają zrozumieć, w jaki sposób zdefiniować gadmST):

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) 

Teraz jesteś gotowy do animacji. Przeczytać stplot stronę pomocy poprawić wyjście graficzne wykorzystując swoje argumenty:

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

W png pliki są klatki z filmu, które mogą być produkowane z ffmpeg.

system('ffmpeg -r 1 -i gadm%02d.png gadm.mp4') 
+0

Dziękuję za odpowiedź, ale zastanawiam się, jak mogę umieścić tutaj Mutiple, całkiem niezależne działki gadm, pętli? Dodałem powyższe dane, aby ułatwić reprodukcję. –

+0

@RuvinRafailov stplot robi pętlę dla ciebie. Dokonałem edycji kodu, aby zilustrować sposób tworzenia klatek i pliku filmowego. –

+0

Przepraszam, za moje głupie pytania, ale to moja pierwsza praca z R, nie mówiąc już o danych przestrzennych, ale nie mogę zrozumieć, jak wstawić moje dane dotyczące bezrobocia do kodu.redagowałem główne pytanie pokazujące, w jaki sposób korzystałem z danych przez 2 lata, ale nie mam pojęcia, jak je animować za pomocą swojej metody. –