在R中在光栅图层上绘制空间点

3

我希望在将矩阵(temp_matrix)转换为栅格对象(tempMap)后绘制它的图表。此外,我希望在同一图表窗口中添加一些已知纬度和经度位置的点。我尝试了几种方法,但由于可用的点是特定的经纬度位置,而我得到的栅格对象具有不同的范围,因此没有一种方法能够奏效。请帮我解决这个问题。以下是该问题的示例数据。

library(raster)
temp_matrix<-array(NA,c(11,11))
temp_matrix[1,]<-c(NA,NA,NA,NA,NA,NA,NA,0,0,-6,-6)
temp_matrix[2,]<-c(0,0,0,0,NA,NA,1,0,0,0,0)
temp_matrix[3,]<-c(1,0,0,-1,-1,0,0,0,1,0,0)
temp_matrix[4,]<-c(1,1,0,0,0,0,-1,-1,0,0,0)
temp_matrix[5,]<-c(1,NA,NA,NA,NA,-1,-1,-1,0,-1,-1)
temp_matrix[6,]<-c(NA,NA,NA,NA,NA,NA,-1,-1,-1,0,0)
temp_matrix[7,]<-c(NA,NA,NA,NA,NA,NA,NA,0,-1,0,0)
temp_matrix[8,]<-c( NA,NA,NA,NA,NA,NA,NA,0,0,0,-1)
temp_matrix[9,]<-c(NA,NA,NA,NA,NA,NA,NA,-1,0,0,0)
temp_matrix[10,]<-c(NA,NA,NA,NA,NA,NA,NA,NA,-1,-1,-2)
temp_matrix[11,]<-c(NA,NA,NA,NA,NA,NA,NA,NA,-2,-3,-2)
plot(raster(temp_matrix),axes = FALSE,legend=FALSE)
tempMap <- raster(temp_matrix)

# plot the points over this raster layer
point_1<-c(10,10) # should appear on 2nd row from top i.e. over temp_matrix[2,10]
point_2<-c(9,10)  # should appear on 3rd row from top i.e. over temp_matrix[3,10]
point_3<-c(1,10)  # should appear on lowermost row i.e.over temp_matrix[11,10]
1个回答

6
你需要设置所需的范围,而不是依赖默认值。
正如“raster”帮助文件所述。
## S4 method for signature 'matrix'
raster(x, xmn=0, xmx=1, ymn=0, ymx=1, crs=NA, template=NULL)

涉及以下内容:

  • xmn :: 最小的x坐标(左边界)

  • xmx :: 最大的x坐标(右边界)

  • ymn :: 最小的y坐标(底部边界)

  • ymx :: 最大的y坐标(顶部边界)

您可以将xmnxmxymnymx设为所需值(在本例中为1、11、1、11)。

tempMap <- raster(temp_matrix, xmn = 1, xmx = 11, ymn = 1, ymx=11)
plot(tempMap,axes = FALSE,legend=FALSE)
points(c(10,9,1), c(10,10,10))


这段代码可以正常工作,但原始矩阵的维度为(37,72),当我尝试更改其范围时,分辨率也会改变并且会使原始图形变形。默认分辨率为:0.01388889、0.02702703(x,y),而新分辨率为:0.5138889、1.945946(x,y)。有什么办法可以在更改范围时保持分辨率相同或重置分辨率?谢谢。tempMap <- raster(diffMat,xmn=-14.5,xmx=22.5,ymn=-36,ymx=36) - Munish
我认为你把 xy 弄反了。使用一些虚拟数据(一个称为 m 的 37 行、72 列矩阵),raster(m,ymn=-14.5,ymx=22.5,xmn=-36,xmx=36) 会生成一个分辨率为 1,1 的栅格。 - mnel
我假设37行应该对应于y轴上的37个分区,尽管它们代表纬度,并且类似的逻辑将经度划分为x轴上的72个部分。虽然我仍在思考理论上的适当解释和我的机器上也存在分辨率问题,但是您的答案有助于理解栅格范围的概念并在所需位置绘制点。谢谢 :) - Munish
1
行和列的约定(令人讨厌地)不同,而且在图像和矩阵中可能是不一致的。请参见library(fortunes);fortune(143) - mnel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接