2015-02-19 2 views
4

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

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

Теперь, я бы например, добавить некоторые значения z, определенные xy cordinates, на карту уровня. Блок данных, содержащий значения 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.

ответ

6

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

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

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

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

enter image description here

+0

Отлично! вы просто спасли меня во всем мире. – code123

+0

Спасибо за исправление, @ OscarPerpiñán. – jbaums

0

Так что я имел dataframe с ху cordinates и так много г столбцов. Это окончательный ответ, чтобы получить очки, добавленные на мою карту, благодаря @ 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)