всем, извините за беспокойство, но я, будучи новичком, столкнулся с серьезной трудностью: я хочу создать анимированную карту Руссина с изменениями уровня безработицы в разные годы, например. На картинке вы можете увидеть данные за один год
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")
Результат, который я хочу получить, похож на анимацию: http://spatial.ly/2011/02/mapping-londons-population-change-2011-2030/ Однако я много гуглил, читал ряд тем в http://stackoverflow.com, включая следующее: Создание фильма из серии сюжетов в R , но все еще не может сделать правильную вещь.
заранее спасибо!
Я придумал что-то вроде этого, может кто-нибудь сказать мне, где ошибка:
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
Рувин Рафаилов
источник
источник
Ответы:
Это так далеко, как я иду. Вы должны быть в состоянии понять это на основе этого кода. Еще раз, поскольку ваша проблема не воспроизводима, мне пришлось создать фиктивные данные, чтобы проиллюстрировать решение. Одним странным аспектом использования spplot является то, что, поскольку он использует решетку для создания графика, вам необходимо создать объект, а затем распечатать объект. В противном случае вы не получите сюжет.
источник
Посмотрите на пакет анимации . "SaveHTML" - это одна из функций, которую стоит изучить, для которой не требуется стороннее программное обеспечение.
Использование функции «saveHTML» в пакете анимации очень просто. Вот пример кода, где я создаю анимацию случайного изменения населения. Аргумент "expr" определяет функцию построения, которую вы хотите передать анимации. Как вы можете видеть в приведенном ниже коде, я использовал цикл for для построения каждого имитируемого столбца.
Я отредактировал пост, чтобы предоставить более релевантный пример на основе столбцов многоугольника.
источник
Анимация, которую вы связали (ниже), представляет собой анимированное GIF-изображение .
По сути, это серия изображений, которые циклически повторяются, что создает эффект анимации. Думайте об этом, как о просмотре серии слайдов, по одной каждую секунду или около того.
Что вам нужно сделать, чтобы создать анимацию:
1) Создайте каждый отдельный «кадр», который будет показан.
2) Создайте сам GIF. Есть несколько сайтов, которые сделают это для вас:
http://www.createagif.net/
http://makeagif.com/
Большинство из этих сайтов позволят вам контролировать размер и скорость анимации.
Вопрос StackOverflow, на который вы ссылаетесь, должен предоставить вам все, что вам нужно знать для выполнения этой задачи в R. Обратите внимание, что сначала вам нужно установить сторонний пакет.
РЕДАКТИРОВАТЬ : Ниже приведена обновленная версия кода по ссылке выше StackOverflow, так как, кажется, немного путаницы.
Этот вышеприведенный код берет каждый из отдельных графиков, которые вы создали в R, и преобразует их в анимацию, зацикливая каждый из них и используя ImageMagick , который вы должны установить.
источник
Вот ответ, благодаря Оскар Перпиньян.
источник