如何在霍夫莫勒图的 Y 轴上放置纬度?

sac*_*cvf 0 plot r raster

我正在绘制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 轴上!

Osc*_*ñán 5

该布局未在该rasterVis::hovmoller 方法中实现。目前只有常见的排列(y 轴上的时间和 x 轴上的纬度/经度)可用。

您可以尝试使用函数代码的最重要部分来解决问题 。对于您的示例,您必须RasterLayer使用纬度值创建一个。这RasterLayer用于zonal聚合您的 RasterStack

library('raster')

dirLayer <- init(SISmm, v='y')
z <- zonal(SISmm, dirLayer, FUN='mean', digits=2)
Run Code Online (Sandbox Code Playgroud)

结果是一个矩阵,该矩阵被转换为 adata.frame以用 来显示lattice::levelplot

## Time on the x-axis, latitude on the y-axis
dat <- expand.grid(y=z[,1], x=idx)
dat$z <- as.vector(z[,-1], mode='numeric')

levelplot(z ~ x*y, data=dat,
          xlab='Time', ylab='Latitude',
          panel=panel.levelplot.raster,
          interpolate=TRUE,
          par.settings=RdBuTheme())
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述