如何按年分面绘制 NetCDF 栅格

How to facet plot NetCDF rasters by year

我成功按照说明使用此处提供的数据集和代码获取一年 NetCDF 数据的图表:

http://rpubs.com/boyerag/297592

与 link 一样,我将数据集上传为 ndvi.array。我切断了第一年并将该子集分配为 ndvi.slice。然后使用代码:

r <- raster(t(ndvi.slice), xmn=min(lon), xmx=max(lon), ymn=min(lat), 
ymx=max(lat), crs=CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs+ 
towgs84=0,0,0"))
r <- flip(r, direction='y')
plot(r)

对于任何一年都可以很容易地做到这一点,但我正在尝试创建所有这些栅格的多面图。我通常的做法是在 ggplot2 中使用 Facet_grid,但这与散点图有点不同,我不确定如何处理它。

如果这是散点图,我的方法应该是:

r = ggplot(ndvi.array, aes(lon,lat)) + geom_point() + facet_grid(. ~ t)

像这样处理栅格的等价物是什么?

I successfully followed the instructions....

不幸的是,这些指令相当糟糕。以下是您如何在(少于?)1/3 的步骤中完成完全相同的事情。

library(raster)
b <- brick("gimms3g_ndvi_1982-2012.nc4")
plot(b[[1]])

toolik_lon <- -149.5975
toolik_lat <- 68.6275
toolik_series <- extract(b, cbind(toolik_lon,toolik_lat), method='simple')
toolik_df <- data.frame(year= seq(from=1982, to=2012, by=1), NDVI=t(toolik_series))
ggplot(data=toolik_df, aes(x=year, y=NDVI, group=1)) +  geom_line() + ggtitle("Growing season NDVI at Toolik Lake Station") + theme_bw()

ndvi.diff <- b[[31]] - b[[1]]
plot(ndvi.diff)

您的问题可能与此无关,因为它似乎是关于如何使用 ggplot2 还是关于循环?请清楚地说明您的问题并使用 R 附带的示例数据,如下所示:

b <- brick(system.file("external/rlogo.grd", package="raster"))
plot(b)

如果要循环:

for (i in 1:nlayers(b)) { plot(b[[i]]) } 

要将 ggplot 与 facets 一起使用,您可以执行以下操作(这是 ?rasterVis::gplot

中的示例
library(rasterVis)
library(ggplot2)

r <- raster(system.file("external/test.grd", package="raster"))
s <- stack(r, r*2)
names(s) <- c('meuse', 'meuse x 2')


theme_set(theme_bw())
gplot(s) + geom_tile(aes(fill = value)) +
           facet_wrap(~ variable) +
           scale_fill_gradient(low = 'white', high = 'blue') +
           coord_equal()

但您可能更喜欢

 levelplot(s)