todo mundo, desculpe pela perturbação, mas estou sendo bastante novo com r enfrentou uma dificuldade crucial: quero criar um mapa animado de Russin com mudanças no desemprego com anos diferentes, como. Na imagem você pode ver dados de um ano
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")
O resultado que desejo obter é algo como animação aqui: http://spatial.ly/2011/02/mapping-londons-population-change-2011-2030/ No entanto, pesquisei bastante no Google, li vários temas em http://stackoverflow.com, incluindo o seguinte: Criando um filme a partir de uma série de gráficos em R , mas ainda não conseguia fazer a coisa certa.
Agradeço antecipadamente!
Eu vim com algo assim, alguém pode me dizer onde está o erro:
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
fonte
fonte
Respostas:
Isto é tanto quanto eu vou. Você deve descobrir isso com base nesse código. Mais uma vez, como seu problema não é reproduzível, tive que criar dados fictícios para ilustrar a solução. Um aspecto estranho no uso do spplot é que, como ele usa a estrutura para criar o gráfico, você precisa criar um objeto e depois imprimi-lo. Caso contrário, você não receberá um enredo.
fonte
Dê uma olhada no pacote de animação . Uma das funções que vale a pena explorar, que não requer software de terceiros, é "saveHTML".
O uso da função "saveHTML" no pacote de animação é muito direto. Aqui está um código de exemplo em que eu crio uma animação de uma alteração aleatória da população. O argumento "expr" define a função de plotagem que você deseja passar para a animação. Como você pode ver no código abaixo, usei um loop for para plotar cada coluna simulada.
Editei a postagem para fornecer um exemplo mais relevante com base em colunas de polígono.
fonte
A animação que você vinculou (abaixo) é uma imagem GIF animada .
É essencialmente uma série de imagens que são percorridas, o que cria o efeito de animação. Pense nisso como clicar em uma série de slides, um a cada segundo ou mais.
O que você precisa fazer para criar a animação é:
1) Crie cada 'quadro' individual que será mostrado.
2) Crie o próprio GIF. Existem vários sites que farão isso por você:
http://www.createagif.net/
http://makeagif.com/
A maioria desses sites permitirá que você controle o tamanho e a velocidade da animação.
A pergunta StackOverflow à qual você se vinculou deve fornecer tudo o que você precisa saber para executar esta tarefa em R. Observe que você deve instalar primeiro um pacote de terceiros.
EDIT : Abaixo está uma versão atualizada do código no link StackOverflow acima, pois parece haver um pouco de confusão.
Este código acima pega cada um dos gráficos individuais que você criou no R e os converte em uma animação fazendo um loop sobre cada um e usando o ImageMagick , que você deve ter instalado.
fonte
Aqui está a resposta, graças a Oscar Perpiñán.
fonte