todos, disculpen las molestias, pero estoy siendo bastante nuevo con r enfrentado una dificultad crucial: quiero crear un mapa animado de Russin con cambios en el desempleo con diferentes años, como. En la imagen puedes ver datos de un año
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")
El resultado, que estoy dispuesto a obtener, es algo así como una animación aquí: http://spatial.ly/2011/02/mapping-londons-population-change-2011-2030/ Sin embargo, busqué mucho en Google, leí varios temas. en http://stackoverflow.com que incluye lo siguiente: Crear una película a partir de una serie de tramas en R , pero aún no podía hacer lo correcto.
¡gracias de antemano!
Se me ocurrió algo como esto, ¿alguien puede decirme dónde está el error?
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
fuente
fuente
Respuestas:
Esto es lo más lejos que puedo llegar. Debería poder resolverlo según este código. Una vez más, dado que su problema no es reproducible, tuve que crear datos ficticios para ilustrar la solución. Un aspecto extraño al usar spplot es que, dado que usa una red para crear el diagrama, necesita crear un objeto y luego imprimir el objeto. De lo contrario, no obtendrá una trama.
fuente
Echa un vistazo al paquete de animación . Una de las funciones que vale la pena explorar, que no requiere software de terceros, es "saveHTML".
Usar la función "saveHTML" en el paquete de animación es muy sencillo. Aquí hay un código de ejemplo donde creo una animación de un cambio aleatorio de población. El argumento "expr" define la función de trazado que desea pasar a la animación. Como puede ver en el siguiente código, utilicé un bucle for para trazar cada columna simulada.
Edité la publicación para proporcionar un ejemplo más relevante basado en columnas de polígono.
fuente
La animación que vinculó (a continuación) es una imagen GIF animada .
Es esencialmente una serie de imágenes que se reciclan, lo que crea el efecto de animación. Piense en ello como hacer clic en una serie de diapositivas, una cada segundo más o menos.
Lo que debe hacer para crear la animación es:
1) Cree cada 'marco' individual que se mostrará.
2) Crea el GIF en sí. Hay varios sitios web que harán esto por usted:
http://www.createagif.net/
http://makeagif.com/
La mayoría de estos sitios web le permitirán controlar el tamaño y la velocidad de la animación.
La pregunta de StackOverflow a la que se vinculó debe proporcionarle todo lo que necesita saber para realizar esta tarea en R. Tenga en cuenta que primero debe instalar un paquete de terceros.
EDITAR : a continuación se muestra una versión actualizada del código del enlace de StackOverflow anterior ya que parece haber un poco de confusión.
Este código anterior toma cada una de las parcelas individuales que ha creado en R y las convierte en una animación haciendo un bucle sobre cada una y usando ImageMagick , que debe haber instalado.
fuente
Aquí está la respuesta, gracias a Oscar Perpiñán.
fuente