【问题标题】:plotting spatial points over a raster layer in r在r中的栅格图层上绘制空间点
【发布时间】:2013-01-21 01:14:34
【问题描述】:

我希望在将矩阵 (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]

【问题讨论】:

    标签: r plot spatial raster


    【解决方案1】:

    您需要设置所需的范围,而不是依赖默认值。

    作为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
    • 我认为你的 xy 颠倒了。对于一些虚拟数据(称为m 的37 行72 列矩阵),raster(m,ymn=-14.5,ymx=22.5,xmn=-36,xmx=36) 给出分辨率为1,1 的栅格
    • 我颠倒了它们,假设 37 行应该对应于 y 轴上的 37 个分区,尽管它们代表纬度和将 x 轴分成 72 个部分的经度的类似逻辑。尽管我仍在考虑理论上的正确解释,并且我的机器上也存在解决问题,但您的回答有助于理解光栅范围的概念并在所需位置绘制点。谢谢:)
    • 行/列的约定(令人讨厌)不同,并且在图像和矩阵中可能不一致。见library(fortunes);fortune(143)
    猜你喜欢
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多