Estoy siendo bastante nuevo con R.
Quiero crear un mapa animado de Rusia con cambios en el desempleo en diferentes años, como. En la imagen se puede ver datos para 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="Desempleo en Rusia por región")
El resultado, que deseo obtener es algo así como la animación aquí: http://spatial.ly/2011/02/mapping-londons-population-change-2011-2030/ Sin embargo, he buscado mucho, leí una serie de temas en http://stackoverflow.com incluyendo el siguiente: Creando una película a partir de una serie de gráficos en R, pero aún no pude hacer lo correcto.
He llegado a algo como esto.
¿Alguien puede decirme dónde está mi 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="Desempleo en Rusia por región")
},img.name = "map", htmlfile = "unrus2.html")
0 votos
Re la edición: ¿qué está saliendo mal con el código?
0 votos
Dado que tu ejemplo no es reproducible, es difícil de solucionar. Algunas cosas a tener en cuenta son: 1) estás aplicando una transformación espacial en un bucle, por lo que lo estás haciendo repetidamente. 2) estás creando un objeto llamado "try" que también es una función de R. 3) podrías iterar a través de nombres de columna reales, es decir, for(i in c("Var1","Var2")). La forma en que actualmente lo tienes codificado es muy confusa. 4) tu llamada a spplot no es correcta, estás pasándole un vector sin sentido.
0 votos
Realmente lo siento por no entender mucho, pero esta es mi primera experiencia real con R. He agregado los datos en la pregunta principal. Si no te importa, ¿puedes sugerir formas de mejorar? Realmente me quedé sin ideas.