wszystkim przepraszam, że przeszkadzam, ale jestem całkiem nowy, ponieważ stanąłem przed kluczową trudnością: chcę stworzyć animowaną mapę Russina ze zmianami bezrobocia w różnych latach. Na zdjęciu widać dane z jednego roku
require(sp)
require(maptools)
require(RColorBrewer)
require(rgdal)
rus<-url("http://www.filefactory.com/file/4h1hb5c1cw7r/n/RUS_adm1_RData")
print(load(rus))
unempl <- read.delim2(file="C:\\unempl1.txt", header = TRUE,
sep = ";",quote = "", dec=",", stringsAsFactors=F)
gadm_names <-gadm$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], unempl$region,
max.distance = 0.2)[1]
setTxtProgressBar(pb, i) # update progress bar
}
col_no <- as.factor(as.numeric(cut(unempl$data[order],
c(0,2.5,5,7.5,10,15,100))))
levels(col_no) <- c("<2,5%", "2,5-5%", "5-7,5%",
"7,5-10%", "10-15%", ">15%")
gadm$col_no <- col_no
myPalette<-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")
Rezultat, który chcę uzyskać, przypomina coś w rodzaju animacji tutaj: http://spatial.ly/2011/02/mapping-londons-population-change-2011-2030/ Jednak często googlowałem, czytałem wiele tematów w http://stackoverflow.com, w tym: Tworzenie filmu z serii fabuł w R , ale nadal nie można zrobić właściwej rzeczy.
z góry dziękuję!
Wymyśliłem coś takiego: czy ktoś może mi powiedzieć, gdzie jest błąd:
require(animation)
require(sp)
require(RColorBrewer)
require(classInt)
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$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))))
saveHTML(
for(k in 1:2) {
try<-get(paste("col_no_", k, sep = ""))
levels(try) <- c("<2,5%", "2,5-5%", "5-7,5%",
"7,5-10%", "10-15%", ">15%")
gadm$col_no <- try
myPalette<-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")
},img.name = "map", htmlfile = "unrus2.html")
cartography
r
animation
Ruvin Rafailov
źródło
źródło
Odpowiedzi:
To jest tak daleko, jak tylko mogę. Powinieneś być w stanie to rozgryźć na podstawie tego kodu. Ponownie, ponieważ twój problem nie jest powtarzalny, musiałem stworzyć fikcyjne dane, aby zilustrować rozwiązanie. Jednym z dziwnych aspektów korzystania ze spplotu jest to, że ponieważ używa on siatki do utworzenia wykresu, musisz utworzyć obiekt, a następnie wydrukować obiekt. W przeciwnym razie nie otrzymasz fabuły.
źródło
Spójrz na pakiet animacji . Jedną z funkcji wartych poznania, która nie wymaga oprogramowania innych firm, jest „saveHTML”.
Korzystanie z funkcji „saveHTML” w pakiecie animacji jest bardzo proste. Oto przykładowy kod, w którym tworzę animację losowej zmiany populacji. Argument „expr” definiuje funkcję drukowania, którą chcesz przekazać do animacji. Jak widać w poniższym kodzie, użyłem pętli for do wykreślenia każdej symulowanej kolumny.
Zredagowałem post, aby podać bardziej odpowiedni przykład oparty na kolumnach wielokąta.
źródło
Animacja, którą połączyłeś (poniżej), jest animowanym obrazem GIF .
Zasadniczo jest to seria obrazów, które są cyklicznie przewijane, co tworzy efekt animacji. Pomyśl o tym, jak klikanie serii slajdów, co sekundę lub mniej więcej.
Aby utworzyć animację, musisz:
1) Utwórz każdą „ramkę”, która będzie wyświetlana.
2) Utwórz sam GIF. Istnieje kilka stron internetowych, które zrobią to za Ciebie:
http://www.createagif.net/
http://makeagif.com/
Większość tych stron pozwala kontrolować rozmiar i szybkość animacji.
StackOverflow pytanie ty związana powinien zapewnić Ci wszystko, co musisz wiedzieć, aby wykonać to zadanie w R. Zauważ, że należy najpierw zainstalować 3rd paczka party.
EDYCJA : Poniżej znajduje się zaktualizowana wersja kodu z linku StackOverflow powyżej, ponieważ wydaje się, że jest trochę zamieszania.
Powyższy kod pobiera poszczególne wykresy utworzone w R i przekształca je w animację, zapętlając każdy z nich i używając programu ImageMagick , który musisz zainstalować.
źródło
Oto odpowiedź, dzięki Oscarowi Perpiñánowi.
źródło