我已经从http://luh.umd.edu/data.shtml下载了一些土地利用场景结果的 NetCDF 文件。这个位置的每个文件都有 11 种土地利用类型的值,每年的值从 2015 年到 2100 年。我想制作一个动画 gif 或电影来显示随时间的变化。这看起来应该很简单,但我尝试了多种路线,但都没有奏效,所以我希望有一些真正有效的路线。1. 一种方法涉及使用栅格包中的堆栈或砖函数创建土地利用变量之一的栅格堆栈或砖。然后使用光栅动画功能。不幸的是,我收到以下错误消息“不支持 RasterLayer [堆栈、砖块] 对象的动画”。
包含我目前为此所做的努力的 R 脚本在这里。
看看你的代码,我可以让下面的代码工作。
基本上,我正在制作一个包含所有年份数据的大数据框。
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
Run Code Online (Sandbox Code Playgroud)
下图是结果(动画很微妙)。
尝试一下raster::animate()
,包之间有几个不兼容的动画函数,这看起来像是冲突。
我通常使用循环来绘制光栅切片并使用 animate 包(例如使用saveHTML()
.
对于 ggplot2,请参阅 gganimate 包,但考虑到需要扩展数据,它的扩展性不佳。