如何按年分面绘制 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)
我成功按照说明使用此处提供的数据集和代码获取一年 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)