我想在一个图中给出单元格编号来描绘一个栅格单元格。我已经做了一个简化的例子,我能够在功率点上做出,但可能有一个更难以做到这一点的分辨率(720 x 360 vs 3 x 5)。 要生成样本数据:
library(raster)
x = raster(matrix(seq(1,15), nrow = 3))
plot(x)
我想修改plot命令(最好),这样如果我选择第5个单元格,结果看起来像这样:
答案 0 :(得分:2)
此代码应该按照您的意愿执行。
plot(raster(matrix(seq(1,15), nrow = 3)))
gridx = 5
gridy = 3
dx = 1/gridx #resolution of the grid
dy = 1/gridy
# if you want to specify the cell number (cell 1 is bottom left):
cell = 15
ny = floor(cell/gridx - dx)+1
nx = cell-gridx*(ny-1)
# if you want to give cell positions, just edit nx, ny
x1 = c(nx-1,nx-1,nx-1,nx)*dx
y1 = c(ny-1,ny,ny-1,ny-1)*dy
x2 = c(nx,nx,nx-1,nx)*dx
y2 = c(ny-1,ny,ny,ny)*dy
segments(x1,y1,x2,y2,col=2,lwd=2)
答案 1 :(得分:2)
这是一种通用方法,我们根据感兴趣的单元格的行和列绘制extent
。
library(raster)
r <- raster(matrix(1:15, nrow=3))
plot(r)
rc <- rowColFromCell(r, 5)
plot(extent(r, rc[1], rc[1], rc[2], rc[2]), add=TRUE, col='red', lwd=3)
extent
的第二个到第四个参数确定将用于计算范围的行(args 2和3)和列(args 4和5)的范围。
如果我们想要概述单元格3,4,8和9,我们可以这样做:
plot(r)
rc <- rowColFromCell(r, c(3, 4, 8, 9))
plot(extent(r, min(rc[, 1]), max(rc[, 1]),
min(rc[, 2]), max(rc[, 2])), add=TRUE, col='red', lwd=3)
这适用于连续单元格集周围的矩形范围。如果要勾勒出任意选择的单元格,可以考虑rasterToPolygons
。例如。对于细胞2,8,9,11和14:
plot(r)
r2 <- r
r2[setdiff(seq_len(ncell(r2)), c(2, 8, 9, 11, 14))] <- NA
r2[!is.na(r2)] <- 1
plot(rasterToPolygons(r2, dissolve=TRUE), add=TRUE, border='red', lwd=2)
在这里,我们创建一个栅格副本,将所有其他单元格设置为NA
,然后将焦点单元格设置为公共值(1
,在这种情况下)。 rasterToPolygons
然后将非NA细胞转换为多边形,如果需要,可以溶解接触的多边形。