r将栅格堆栈或砖块转换为动画

时间:2019-10-23 21:28:31

标签: r ggplot2 raster

我从http://luh.umd.edu/data.shtml下载了一些土地使用方案结果的NetCDF文件。该位置的每个文件都具有11种土地使用类型的值,其年度值从2015年到2100年。我想制作一个动画的gif或电影,以显示随时间的变化。这似乎应该很简单,但是我尝试了各种路线,但没有一条可行,所以我希望有一些切实可行的路线。 1.一种方法涉及使用栅格数据包中的堆栈或积木函数创建一个土地使用变量之一的栅格堆栈或积木。然后使用栅格动画功能。不幸的是,我收到以下错误消息“不支持RasterLayer [stack,brick]对象的动画”。

  1. 另一个选择是将每年的土地利用数据转换为SpatialPixelDataFrame,然后转换为data.frame,使用ggplot创建gif,然后将gif组合为动画gif。但是这个过程似乎非常复杂。

一个包含我目前所做的工作的R脚本是here

2 个答案:

答案 0 :(得分:2)

浏览一下您的代码,我可以使下面的代码正常工作。

基本上,我正在使用所有年份的数据制作一个大数据框。

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 :(得分:1)

尝试raster::animate(),程序包中有多个不兼容的动画函数,这似乎是冲突。

我通常使用循环进行动画处理以绘制栅格切片,并使用动画程序包捕获该切片,例如与saveHTML()

对于ggplot2,请参见gganimate软件包,但由于需要扩展数据,因此无法很好地扩展。