【问题标题】:animated gadm map in RR中的动画gadm地图
【发布时间】:2013-06-18 08:09:12
【问题描述】:

大家,很抱歉打扰,但我对 r 很陌生,但我面临一个关键的困难:我想创建一个 Russin 的动画地图,其中包含不同年份的失业率变化,例如。首先,我在这里阅读了许多主题,包括Creating a Movie from a Series of Plots in R,尽管我仍然无法正确地做到这一点。结果我想要的是像here 这样的动画地图,但是失业,就像我做了一年一样! 这是代码:

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

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

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

【问题讨论】:

    标签: r animation map


    【解决方案1】:

    spacetime 包定义了 stplot 方法,其中包含几个 图形替代品。使用它的animate 参数来构建一个 动画。首先你必须定义一个STFDF 对象(阅读 包文件和 this paper了解详情)

    首先导入你的SpatialPolygonsDataFrame...:

    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)
    

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

    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):

    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 帮助页面 使用其参数改进图形输出:

    png('gadm%02d.png')
    stplot(gadmST, animate=1, do.repeat=FALSE)
    dev.off()
    

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

    system('ffmpeg -r 1 -i gadm%02d.png gadm.mp4')
    

    【讨论】:

    • 感谢您的回答,但我想知道如何在这里放置多个、非常独立的 gadm 图、循环?我添加了上面的数据以简化复制
    • @RuvinRafailov stplot 正在为您执行循环。我已经编辑了代码来说明如何生成帧和电影文件。
    • 对不起,对于我的愚蠢问题,但这是我第一次使用 R,更不用说空间数据了,但我不明白的是如何在你的代码中插入我的失业数据。我编辑了主要问题,展示了我如何使用数据 2 年,但不知道如何使用您的方法对其进行动画处理
    • 在我完成所有操作并重新检查每个名称后,使用 stplot(gadmST, animate=1, do.repeat=FALSE) 我在 Summary.factor(c(27L, 28L, 29L) 中有错误, 30L, 31L, 32L, 33L, 34L, 36L, : min 对因子没有意义
    • 我已经用你的代码和新的更正数据更新了这个问题。如果您能够帮助解决问题,我将不胜感激
    猜你喜欢
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 2018-11-28
    • 2021-11-28
    • 2021-07-22
    相关资源
    最近更新 更多