r - 将XY点添加到由levelplot生成的栅格 map 中

标签 r points levelplot

我有使用R中的raster包生成的raster映射。可以使用rasterVis包的levelplot函数将这些栅格图层可视化:

levelplot(rasterstack, layout=c(1, 2), 
          col.regions=colorRampPalette(c('darkred', 'red3', 'orange2', 'orange', 
                                         'yellow', 'lightskyblue', 'steelblue3', 
                                         'royalblue3', 'darkblue')))

现在,我想将xy坐标定义的一些z值添加到级别图映射中。包含z值的数据框有4列。第1列和第2列包含x和y坐标,第3列包含layout(1、1)中的 map 1的z值,而对于layout(1,2)则包含第4列。

应该添加每个 map 的点,以便如果z <0.05,则为pch=2,如果z> 0.05,则为pch=3

我在网上搜索并找到了Ripley的解决方案,但在我的情况下不起作用:
levelplot(rcp852, xlab = "", ylab = "",
          panel = function(x, y, subscripts, ...) {
            panel.levelplot(x, y, subscripts, ...)
            panel.xyplot(topo$x,topo$y, cex = 0.5, col = 1)
          }
)

我尝试了许多其他选择,但是这些点与通过levelplot生成的 map 不对齐。

最佳答案

layer为此非常方便:

library(raster)
library(rasterVis)
library(sp)

s <- stack(replicate(2, raster(matrix(runif(100), 10))))
xy <- data.frame(coordinates(sampleRandom(s, 10, sp=TRUE)),
                z1=runif(10), z2=runif(10))
coordinates(xy) <- ~x+y

levelplot(s, margin=FALSE, at=seq(0, 1, 0.05)) + 
  layer(sp.points(xy, pch=ifelse(xy$z1 < 0.5, 2, 3), cex=2, col=1), columns=1) +
  layer(sp.points(xy, pch=ifelse(xy$z2 < 0.5, 2, 3), cex=2, col=1), columns=2)
请注意,columnslayer参数(也存在rows)指定要将图层添加到的面板。

关于r - 将XY点添加到由levelplot生成的栅格 map 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28597149/

相关文章:

R - 从 csv 到 xts 的股市数据

r - 如何有效地从(许多)大栅格中提取许多多边形的值

R - 设置边距不起作用

python - 找到两个圆的所有公共(public)点

graphics - 计算曲面的地平线? - 不是极值

r - 如何在水平图中将 x 轴标签旋转 90 度

r - 移动水平图中颜色条/颜色键的位置

r - Terra 从分类栅格中提取不正确的值

c# - 检查点是否是对角线