2016-08-30 8 views
0

Я пытаюсь построить результаты кригинга с внешним дрейфом, перекрывая точки измерения. Я хотел бы, чтобы мои точки измерения были построены с той же цветовой палитрой сетки и с черной рамкой в ​​соответствии с измеренным значением.R spplot - график точек над растром с одинаковой цветовой гаммой

Я могу нарисовать точки с помощью 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) 

где г является SpatialPointsDataFrame где «дождь» это поле значение я хотел бы использовать для цвета, и г является SpatialGridDataFrame, который содержит дэ результат интерполяции.

В результате точки не окрашены в соответствии с палитрой сетки.

любая идея?

PS: Мне нужно сохранить результат spplot в переменной p, потому что затем я использую его в сетке grid2 с сеткой 2x2 с gridExtra.

спасибо!

ответ

0

Если кто-то сталкивается с моей же проблема, это то, как я ее решил:

Сначала я выбираю цвет палитры используется spplot:

colscale <- bpy.colors() 

Затем я создать индекс, который отображает мои ценности в соответствующий цвет цветовой палитры. Результатом является вектор f той же длины моего SpatialPointsDataFrame, содержащий соответствующие цвета. 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.