Добавьте точки XY на растровую карту, сгенерированную levelplot

У меня есть карты raster, созданные с использованием пакета raster в R. Эти растровые слои можно визуализировать с помощью функции levelplot пакета rasterVis:

levelplot(rasterstack, layout=c(1, 2), 
          col.regions=colorRampPalette(c('darkred', 'red3', 'orange2', 'orange', 
                                         'yellow', 'lightskyblue', 'steelblue3', 
                                         'royalblue3', 'darkblue')))

Теперь я хотел бы добавить некоторые значения z, определенные координатами xy, к карте уровня. Кадр данных, содержащий значения z, имеет 4 столбца. Столбцы 1 и 2 содержат координаты x и y, столбец 3 содержит значения z для карты 1 в макете (1, 1) и столбец 4 для макета (1, 2).

Точки на карту должны быть добавлены таким образом, что если z ‹ 0,05, pch=2 и если z > 0,05, pch=3.

Я искал в Интернете и нашел решение Рипли, но в моем случае оно не работает:

levelplot(rcp852, xlab = "", ylab = "",
          panel = function(x, y, subscripts, ...) {
            panel.levelplot(x, y, subscripts, ...)
            panel.xyplot(topo$x,topo$y, cex = 0.5, col = 1)
          }
)

Я пробовал много других вариантов, но точки не совпадают с картой, сгенерированной через levelplot.


person code123    schedule 19.02.2015    source источник


Ответы (2)


layer для этого очень удобно:

library(raster)
library(rasterVis)
library(sp)

s <- stack(replicate(2, raster(matrix(runif(100), 10))))
xy <- data.frame(coordinates(sampleRandom(s, 10, sp=TRUE)),
                z1=runif(10), z2=runif(10))
coordinates(xy) <- ~x+y

levelplot(s, margin=FALSE, at=seq(0, 1, 0.05)) + 
  layer(sp.points(xy, pch=ifelse(xy$z1 < 0.5, 2, 3), cex=2, col=1), columns=1) +
  layer(sp.points(xy, pch=ifelse(xy$z2 < 0.5, 2, 3), cex=2, col=1), columns=2)

Обратите внимание, что аргумент columns для layer (также существует rows) указывает, на какие панели вы хотите добавить слой.

введите здесь описание изображения

person jbaums    schedule 19.02.2015
comment
Идеальный! Вы только что сэкономили мне время мира. - person code123; 19.02.2015
comment
Теперь он должен снова работать @JerryN. Спасибо за внимание. - person jbaums; 04.08.2020

Итак, у меня был фрейм данных с координатами xy и множеством столбцов z. Это окончательный ответ для добавления очков на мою карту благодаря @jbaums:

s <- stack(raster1,raster2)
coordinates(SITES...TTEST) <- ~x+y # SpatialPointsDataFrame
levelplot(s, layout=c(1, 2), 
          col.regions=colorRampPalette(c("darkred", "red3", 
                                         "orange", "yellow", "lightskyblue", "royalblue3", 
                                         "darkblue")),
          at=seq(floor(39.15945) ,ceiling(51.85068), length.out=30), 
          par.strip.text=list(cex=0),scales=list(alternating=FALSE))+
  layer(sp.points(SITES...TTEST, pch=ifelse(SITES...TTEST$Precip_DJF6 < 0.05, 2, 3), cex=2, col=1), rows=1) +
  layer(sp.points(SITES...TTEST, pch=ifelse(SITES...TTEST$Precip_DJF6 < 0.05, 2, 3), cex=2, col=1), rows=2)
person code123    schedule 19.02.2015