如何按年计划NetCDF栅格

时间:2017-11-29 22:22:17

标签: r netcdf

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

http://rpubs.com/boyerag/297592

与链接一样,我将数据集上传为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)

任何一年都很容易做到这一点,但我正在尝试创建所有这些栅格的刻面情节。我这样做的正常方法是在Facet_grid中使用ggplot2,但这与散点图略有不同,我不知道如何处理它。

如果这是散点图,我的方法就是做:

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

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

1 个答案:

答案 0 :(得分:1)

  

我成功地遵循了指示......

不幸的是,这些是非常糟糕的指示。以下是如何在(小于?)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与facet一起使用,您可以执行以下操作(这是?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)