我正在绘制hovmoller三个栅格的图,但该函数在 x 轴上绘制纬度,在 y 轴上绘制时间。通常(更容易阅读)纬度位于 Y 轴上。可重现的例子:
library("rasterVis")
r <- raster(nrows=10, ncols=10)
r <- setValues(r, 1:ncell(r))
r1 <- raster(nrows=10, ncols=10)
r1 <- setValues(r1, 1:ncell(r))
r2 <- raster(nrows=10, ncols=10)
r2 <- setValues(r2, 1:ncell(r))
St=stack(r,r1,r2)
idx <- seq(as.Date('2008-01-15'), as.Date('2008-1-17'), 'day')
SISmm <- setZ(St, idx)
hovmoller(SISmm, contour=FALSE, panel=panel.levelplot.raster,
yscale.components=yscale.raster.subticks,
interpolate=TRUE, par.settings=RdBuTheme)
Run Code Online (Sandbox Code Playgroud)
这会产生:
所以我希望时间在 X 轴上,纬度在 Y 轴上!
我有一个 SCA(nrow=108,ncol=132,nlayers=365) 的光栅砖,它包含部分积雪。我想从这个 8 层中每层制作 46 个堆栈,并从这 46 个堆栈中计算最大部分积雪。我该怎么做?
我有一个raster图像 (.tif),每个像素的连续值在 0 和 1 之间。我想计算这个区域(也可以是多个像素),raster其中的值在一组值间隔中:即 0.1 - 0.2 , 0.3 - 0.4, 0.7 - 0.8。最终目的是看哪个区间占据的面积更大。有什么想法可以尝试或如何处理它R?
我有两个与该错误相关的问题:
第一:我有一个合并的 dem 层和多个 shapefile,我创建了一个蒙版 shapefile 边界列表,我能够绘制所有这些,除了一个“第一个”,它是最大的一个:
> plot(DEM_masked_list[[1]])
Error in file(fn, "rb") : cannot open the connection
In addition: Warning message:
In file(fn, "rb") :
cannot open file '/private/var/folders/2w/rjzwcrbn3pg0jmsrfkz7n52h0000gn/T/RtmpkL8Ot5/raster/r_tmp_2018-01-29_014745_982_20879.gri': No such file or directory
Run Code Online (Sandbox Code Playgroud)
我注意到第一个 dem 的数据源与所有其他 dem 不同,这可能是由于它的尺寸较大(单元格数量为 509141570)!
DEM_masked_list
[[1]]
class : RasterLayer
dimensions : 20015, 25438, 509141570 (nrow, ncol, ncell)
resolution : 9.259259e-05, 9.259259e-05 (x, y)
extent : -70.43231, -68.07694, 45.98676, 47.84 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs
data source …Run Code Online (Sandbox Code Playgroud) 更新 09/17/2012
这是一段使用自包含数据重现我的问题的代码:
请记住,我拥有的实际数据维度很大......
尺寸:3105、7025、21812625、12(nrow、ncol、ncell、nlayers)
我需要的是每一行的最大值的索引,层上的列。所有 NA 都应该返回 NA 并且多个最大副本应该返回第一个最大索引(或其他东西,必须一致)
# Create a test RasterStack
require(raster)
a <- raster(matrix(c(11,11,11,
NA,11,11,
11,11,13),nrow=3))
b <- raster(matrix(c(12,12,12,
NA,12,12,
40,12,13),nrow=3))
c <- raster(matrix(c(13,9,13,
NA,13,13,
13,NA,13),nrow=3))
d <- raster(matrix(c(10,10,10,
NA,10,10,
10,10,10),nrow=3))
corr_max <- raster(matrix(c(13,12,13,
NA,13,13,
40,12,13),nrow=3))
stack <- stack(a,b,c,d)
which.max2 <- function(x, ...)which.max(x)
# stackApply method
max_v_sApp <- stackApply(stack,rep(1,4),which.max2,na.rm=NULL)
# calc method
max_v_calc <- calc(stack,which.max)
Run Code Online (Sandbox Code Playgroud)
希望这提供了足够的信息。
更新:
这可能有效......现在测试:
which.max2 <- function(x, ...){
max_idx <- which.max(x) # Get the max
ifelse(length(max_idx)==0,return(NA),return(max_idx))
}
Run Code Online (Sandbox Code Playgroud)