• преобразовать растровый стек или кирпич в анимацию - PullRequest
0 голосов
/ 24 октября 2019

Я скачал некоторые NetCDF-файлы результатов сценария землепользования из http://luh.umd.edu/data.shtml. Каждый файл в этом месте имеет значения для 11 типов землепользования с годовыми значениями с 2015 по 2100 год. Я хотел бы сделать анимированный GIFили фильм, который показывает изменения с течением времени. Кажется, это должно быть просто, но я пробовал множество маршрутов, ни один из которых не работает, поэтому я надеюсь, что некоторые из них действительно работают. 1. Один из подходов заключается в создании растрового стека или кирпича одной из переменных землепользования с использованием стековых или кирпичных функций из растрового пакета. затем с помощью растровой анимации. К сожалению, я получаю следующее сообщение об ошибке "анимация объектов RasterLayer [stack, brick] не поддерживается".

Другим вариантом является преобразование каждого года данных о землепользовании в SpatialPixelDataFrame, а затем в data.frame, использование ggplot для создания рисунка, а затем объединение рисунков в анимированный рисунок. Но этот процесс кажется чрезвычайно запутанным.

Сценарий R, который содержит мои текущие усилия сделать это, здесь .

Ответы [ 2 ]

2 голосов
/ 24 октября 2019

Просматривая ваш код, я могу заставить работать приведенный ниже код.

По сути, я делаю большой массив данных с данными за все годы.

mydf <- purrr::map_dfr(
  as.list(ncin.brick), 
  ~setNames(as.data.frame(as(., "SpatialPixelsDataFrame")), c('value', 'x', 'y')), 
  .id = 'year'
)

gg <- ggplot(
  mydf, 
  aes(x = x, y = y, fill = value)
) +
  geom_sf(data = borders, fill = "transparent", color = "black", inherit.aes = FALSE) +
  geom_tile() +
  scale_fill_viridis_c() +
  ggthemes::theme_map()

gganim <- gg + transition_time(as.numeric(year)) #+ labs(title = "Year: {frame_time}")

gganim

Изображениениже приведен результат (тонкая анимация).

enter image description here

1 голос
/ 24 октября 2019

Попробуйте raster::animate(), в пакетах есть несколько несовместимых функций анимации, и это выглядит как столкновение.

Обычно я анимирую, используя цикл для построения растровых фрагментов, и фиксирую его с помощью пакета animate, например, с помощьюsaveHTML().

Для ggplot2 см. Пакет gganimate, но он плохо масштабируется, учитывая необходимость расширения данных.

...