R spplot - 在具有相同色阶的光栅上绘制点

时间:2016-08-30 12:17:42

标签: r colors grid points sp

我试图用外部漂移绘制克里金法的结果,重叠测量点。我希望根据测量值,使用相同的网格调色板绘制测量点,并使用黑色边框。

我可以使用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图中使用它。

非常感谢!

1 个答案:

答案 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.