首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中的gadm动画地图

R中的gadm动画地图
EN

Stack Overflow用户
提问于 2013-06-18 16:09:12
回答 1查看 1.1K关注 0票数 5

各位,很抱歉打扰你们了,但我是个新手,面临着一个关键的难题:我想创建一张俄罗斯的动画地图,上面有不同年份失业率的变化,比如。首先,我在这里阅读了一些主题,包括Creating a Movie from a Series of Plots in R,尽管我仍然不能正确地做到这一点。我想要的结果是像here一样的动画地图,但有失业问题,就像我已经做了一年的!

代码如下:

代码语言:javascript
复制
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")

很抱歉我这么不理解,但我真的需要帮助。提前感谢!

Here is data to be able to reproduce the code

新代码,我尝试使用以下建议

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-19 06:36:53

spacetime包使用几个图形替代方法定义了stplot方法。使用其animate参数构建动画。首先,您必须定义一个STFDF对象(有关详细信息,请阅读包文档和this paper )

首先导入您的SpatialPolygonsDataFrame...:

代码语言:javascript
复制
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)

..。然后添加您的数据(两天)。您必须使用SpatialPolygon的代码重新排序data.frame

代码语言:javascript
复制
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,]

不幸的是,数据的区域名称与多边形的区域名称不完全匹配。因此,前面的代码将为data.frame提供比多边形更少的行数,而下一段代码将失败。您可能希望在使用此代码之前清理数据(请阅读STFDF帮助页面以了解如何定义gadmST):

代码语言:javascript
复制
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)

现在,您已准备好播放动画。阅读stplot帮助页面以使用其参数改进图形输出:

代码语言:javascript
复制
png('gadm%02d.png')
stplot(gadmST, animate=1, do.repeat=FALSE)
dev.off()

png文件是可以用ffmpeg制作的电影的帧。

代码语言:javascript
复制
system('ffmpeg -r 1 -i gadm%02d.png gadm.mp4')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17163670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档