我试图用外部漂移绘制克里金法的结果,重叠测量点。我希望根据测量值,使用相同的网格调色板绘制测量点,并使用黑色边框。
我可以使用sp.layout绘制点,但我无法理解如何根据网格相同的默认调色板对它们进行着色。
这是我尝试做的事情:
colbreaks <- seq(from=0, to=5, by=0.1)
rg <-list("sp.points", g, cex=1.5, pch=19, fill=g$rain, colourkey=TRUE)
p1 <- spplot(r, at=colbreaks, sp.layout=rg)
其中g是SpatialPointsDataFrame,其中“rain”是我想用于颜色的值字段,r是包含插值结果的SpatialGridDataFrame。
在结果中,点不会根据网格调色板着色。
任何想法?
PS:我需要将spplot的结果存储在变量p中,因为我在带有gridExtra的2x2 grid.arrange图中使用它。
非常感谢!
答案 0 :(得分:0)
如果有人遇到同样的问题,我就是这样解决的:
首先,我选择spplot使用的调色板:
colscale <- bpy.colors()
然后我创建一个索引,将我的值映射到调色板的相应颜色。结果是我的SpatialPointsDataFrame长度相同的向量f,包含相应的颜色。 Maxrain是与调色板末尾相关的最大值(白色):
ind <- floor(g$rain/maxrain*(length(colscale)-1)+1)
f <- ind
f[ind>length(colscale)]<- "#FFFFFF" # White for the exceeding values
f[is.na(ind)==F & ind<=length(colscale)] <- colscale[ind[is.na(ind)==F & ind<=length(colscale)]]
f[is.na(f)==T] <- "#444444" # Grey for the NA
然后我为sp.layout创建我的列表。第一组点只是为了获得黑色轮廓
rgb<-list("sp.points", g, cex=1.2, pch=19, col = "black", colourkey=T)
rg<-list("sp.points", g, cex=1.0, pch=19, cuts=length(g$rain), col = f, colourkey=T)
最后我可以使用spplot中的两个列表:
colbreaks <- seq(from=0, to=maxrain, by=0.1)
p <- spplot(r, at=colbreaks, sp.layout=list(rgb, rg))
希望它也可以帮助别人。 如果你找到一种更聪明,更简单的方法,请告诉我。
This is the result of the lines above. The raster and the points have the same colour scale.