【问题标题】:r convert raster stack or brick to an animationr 将栅格堆栈或砖块转换为动画
【发布时间】:2019-10-23 21:28:31
【问题描述】:

我从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

【问题讨论】:

    标签: r ggplot2 raster


    【解决方案1】:

    看看你的代码,我可以让下面的代码工作。

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

    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
    

    下图是结果(动画很微妙)。

    【讨论】:

    • purrr 代码很棒!其余的对我有用。但是制作动画需要非常非常长的时间。有什么加快速度的建议吗?
    • 我也花了很长时间。抱歉,我对空间数据不是很熟悉,也不知道瓶颈在哪里。
    【解决方案2】:

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

    我通常使用循环动画​​来绘制光栅切片,并使用 animate 包捕获它,例如saveHTML()

    对于 ggplot2,请参阅 gganimate 包,但由于需要扩展数据,它不能很好地扩展。

    【讨论】:

    • 我以为我已经明确添加了光栅前缀,但显然没有。这就是冲突的来源Attaching package: ‘gganimate’ The following object is masked from ‘package:raster’: animate
    • 您能否详细介绍一下您如何使用 saveHTML()。我尝试了以下saveGIF(raster::animate(ncin.brick, pause = 1, n = 1), movie.name = "animation.gif"),但它已经运行了至少 1/2 小时没有输出
    • stackoverflow.com/questions/30031890/… 有一个使用 saveHTML 和 saveGIF 的好例子
    猜你喜欢
    • 1970-01-01
    • 2018-06-09
    • 2016-10-01
    • 2018-10-06
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 2019-04-13
    • 2019-03-06
    相关资源
    最近更新 更多