R 在光栅图层上打印XYZ点

R 在光栅图层上打印XYZ点,r,colors,geospatial,r-raster,R,Colors,Geospatial,R Raster,我想在光栅图层上显示一组点,并将它们按与光栅相同的比例着色。我看过其他问题,但还没有解决。点值表示30个测站的浓度。光栅层显示使用浓度生成的插值栅格。在下面的代码中,我得到了插值的输出,它覆盖了比我需要映射的范围更广的区域。我将其剪裁到用作底图的shp层。然后映射剪裁的插值,并添加点 我已经得到了显示点和光栅的地图,我不清楚如何得到与光栅相同的点比例。我想我需要从插值中提取颜色梯度,并将其与XYZ文件中的值进行匹配,但我不确定这是否是正确的选择 到目前为止生成地图的代码: # test data

我想在光栅图层上显示一组点,并将它们按与光栅相同的比例着色。我看过其他问题,但还没有解决。点值表示30个测站的浓度。光栅层显示使用浓度生成的插值栅格。在下面的代码中,我得到了插值的输出,它覆盖了比我需要映射的范围更广的区域。我将其剪裁到用作底图的shp层。然后映射剪裁的插值,并添加点

我已经得到了显示点和光栅的地图,我不清楚如何得到与光栅相同的点比例。我想我需要从插值中提取颜色梯度,并将其与XYZ文件中的值进行匹配,但我不确定这是否是正确的选择

到目前为止生成地图的代码:

# test data for 4 stations

XYZData<- data.frame(
 X = c(577422.4, 579220.9, 580996.0, 584633.1), 
 Y = c(4210598, 4211570, 4212198, 4213455),Z = c(7.1,10.2,12,3))

library(raster)
rasterDF <- raster(idw_out) # idw_out is the output interpolation grid
newproj<-'my projection' # setting projection
a<-projectRaster(rasterDF, crs=newproj)

nfullName="./shpdata/this is my base map.shp"
nlayerName="name of my base map"
border_rev<-readOGR(dsn=nfullName,layer=nlayerName, verbose=F) # map extent
x1<-mask(a, border_rev) # clip interpolation to basemap

h<- colors(); h1<-h[10:100] # attempting to standardize colors used
p <- plot(x1, col=h1); points(XYZdata, type='p', col=h1)
这是指向光栅的链接:

xyz数据如下所示:

mydata <- data.frame(Longitude = c(577422.442467061, 579220.875124347, 
+ 580995.982508038, 584633.125414608, 585696.32284728, 589533.313960728, 
+ 587475.548155474, 582963.372460121, 578940.888532248, 582075.111557177 
+ ), Latitude = c(4210598.27557511, 
+ 4211569.85438234, 4212197.61081488, 4213455.20812117, 4213299.86256043, 
+ 4213030.38550458, 4214284.20259049, 4215457.67119233, 4213298.22263535, 
+ 4217435.01191314
+ ), Result = c(7.19, 10.88, 6.59, 5.92, 4.85, 3.83, 4.57, 4.71, 
+ 5.22, 2.07))

mydata首先,我创建了一个可复制的示例:

library(rgdal)
library(raster)

xyz <- data.frame(x = seq(-160,160, 25), 
                  y = seq(-40, 20, 5), 
                  z = rnorm(13)
)
rasterDF <- raster(ncol = 100, nrow = 50)
rasterDF[] <- rnorm(ncell(rasterDF))
然后,将这些点下方的光栅单元的数据连接到z值(这只是示例再现性的一个变通方法;您的值应该已经相同)

之后,您可以像这样绘制结果,并使用
plot(..,add=TRUE)


首先,我创建了一个可复制的示例:

library(rgdal)
library(raster)

xyz <- data.frame(x = seq(-160,160, 25), 
                  y = seq(-40, 20, 5), 
                  z = rnorm(13)
)
rasterDF <- raster(ncol = 100, nrow = 50)
rasterDF[] <- rnorm(ncell(rasterDF))
然后,将这些点下方的光栅单元的数据连接到z值(这只是示例再现性的一个变通方法;您的值应该已经相同)

之后,您可以像这样绘制结果,并使用
plot(..,add=TRUE)


请提供一个可复制的示例请提供一个可复制的示例谢谢loki。这很有道理。但是,这不适用于我的实际光栅文件,不知道为什么。当我用rasterDF(在我的例子中是x1)标准化z值时,我得到了这个错误:terrain.colors(ncolors)[(xyzSP$Result-minValue(x1))/(maxValue(x1)-:只有0可能与负下标混合。扫描您提供的数据(或其样本),为了创建一个可复制的示例?@loki。我在上面编辑了尽可能多的关于数据的信息。我不确定如何发布一个大的光栅示例。@user1868064,光栅层的摘要不起作用。因此,您可能会考虑如何提供数据(或者,如果不可共享,请尝试创建一个导致此错误的示例)感谢loki。这非常有意义。但是,这不适用于我的实际光栅文件,不确定原因。我在使用rasterDF规范化z值时遇到此错误(在我的示例中为x1):terrain.Color(ncolors)中的错误[(xyzSP$Result-minValue(x1))/(maxValue(x1)-:只有0可能与负下标混合。如果您提供数据(或其样本),则扫描,为了创建一个可复制的示例?@loki。我在上面编辑了尽可能多的关于数据的信息。我不确定如何发布一个大的光栅示例。@user1868064,光栅层的摘要不起作用。因此,您可能会考虑如何提供数据(如果不可共享,请尝试创建导致此错误的示例)
xyzSP <- SpatialPointsDataFrame(coords = xyz[,1:2], 
                                data = xyz, 
                                proj4string = CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"))
xyzSP$Z <- rasterDF[xyzSP,]
ncolors <- 100
xyzSP$color <- terrain.colors(ncolors)[(xyzSP$z - minValue(rasterDF))/
                                         (maxValue(rasterDF)- minValue(rasterDF)) * ncolors]
plot(rasterDF, col = terrain.colors(ncolors))
plot(xyzSP, add = TRUE, bg = xyzSP$color, pch = 21, cex = 1)