spplot / lattice: объекты не отрисовываются / не перерисовываются

У меня есть сетка, и я хочу создать карту из этой сетки с некоторыми элементами карты (масштаб, стрелка на север и т. Д.). У меня нет проблем с рисованием сетки и нужной мне раскраски, но дополнительные элементы карты не отображаются на карте. Я попытался поместить first=TRUE в аргумент sp.layout в соответствии с sp руководством, но все равно безуспешно.

Я воспроизвел проблему с интегрированным набором данных meuse, поэтому вы можете просто скопировать и вставить этот код. Я использую эти версии пакетов: lattice_0.20-33 и sp_1.2-0

library(sp)
library(lattice) # required for trellis.par.set():
trellis.par.set(sp.theme()) # sets color ramp to bpy.colors()

alphaChannelSupported = function() { 
  !is.na(match(names(dev.cur()), c("pdf")))
}

data(meuse)
coordinates(meuse)=~x+y
data(meuse.riv)


library(gstat, pos = match(paste("package", "sp", sep=":"), search()) + 1)
data(meuse.grid)
coordinates(meuse.grid) = ~x+y
gridded(meuse.grid) = TRUE
v.uk = variogram(log(zinc)~sqrt(dist), meuse)
uk.model = fit.variogram(v.uk, vgm(1, "Exp", 300, 1))
meuse[["ff"]] = factor(meuse[["ffreq"]])
meuse.grid[["ff"]] = factor(meuse.grid[["ffreq"]])
zn.uk = krige(log(zinc)~sqrt(dist), meuse, meuse.grid, model = uk.model)
zn.uk[["se"]] = sqrt(zn.uk[["var1.var"]])

meuse.sr = SpatialPolygons(list(Polygons(list(Polygon(meuse.riv)),"meuse.riv")))
rv = list("sp.polygons", meuse.sr, fill = "lightblue")
sampling = list("sp.points", meuse.riv, color = "black")
scale = list("SpatialPolygonsRescale", layout.scale.bar(), 
             offset = c(180500,329800), scale = 500, fill=c("transparent","black"), which = 4)
text1 = list("sp.text", c(180500,329900), "0", cex = .5, which = 4)
text2 = list("sp.text", c(181000,329900), "500 m", cex = .5, which = 4)
arrow = list("SpatialPolygonsRescale", layout.north.arrow(), 
             offset = c(181300,329800), 
             scale = 400, which = 4)

library(RColorBrewer)
library(lattice)
trellis.par.set(sp.theme())
precip.pal <- colorRampPalette(brewer.pal(7, name="Blues"))

spplot(zn.uk, "var1.pred",
       sp.layout = list(rv, sampling, scale, text1, text2),
       main = "log(zinc); universal kriging standard errors",
       col.regions=precip.pal,
       contour=TRUE, 
       col='black',
       pretty=TRUE,
       scales=list(draw = TRUE),
       labels=TRUE)

И вот как это выглядит ... все голое:  введите описание изображения здесь Итак, мои вопросы:

  1. Где прячется масштабная линейка, стрелка севера и т. Д.? Я что-то пропустил? Каждый пример, который я мог найти в Интернете, похож на этот. В моем собственном наборе данных я сначала вижу масштабную линейку и стрелку севера, но как только сетка визуализируется, она накладывает дополнительные элементы карты (за исключением текста шкалы, который отображается на карте, а не полосы и стрелка севера почему-то не понимаю).
  2. Сообщение об ошибке, появляющееся на карте, просто отображается, когда я пытаюсь добавить точки отбора проб sampling = list("sp.points", meuse.riv, color = "black"). Без этой записи карта отображается без ошибок, но также без дополнительных элементов карты. Как я могу показать точки отбора проб на карте (например, кружками, размер которых зависит от абсолютного значения этой точки отбора проб)?

Это беспокоило меня уже много-много часов, и я не могу найти для этого никакого решения. В учебнике Биванда и др. (2013) «Прикладной анализ пространственных данных с помощью R» я мог прочитать следующую запись:

Порядок элементов в аргументе sp.layout имеет значение; в принципе объекты рисуются в том порядке, в котором они появляются. По умолчанию, когда объект spplot имеет точки или линии, элементы sp.layout рисуются перед точками, чтобы можно было рисовать сетки и многоугольники в качестве фона. Для сеток и многоугольников элементы sp.layout отрисовываются позже (так что элемент не будет перекрываться сеткой и / или многоугольником). Для сеток добавление элемента списка first = TRUE гарантирует, что элемент будет нарисован до того, как будет нарисована сетка (например, при добавлении заполненных многоугольников). Прозрачность может помочь при объединении слоев; он доступен для устройства PDF и некоторых других устройств. Функция sp.theme возвращает решетчатую тему, которая может быть полезна для графиков, созданных spplot; используйте trellis.par.set (sp.theme ()) после открытия или изменения устройства, чтобы сделать это эффективным.

Однако и с этой дополнительной информацией я не смог решить эту проблему. Рад любой подсказке!


person GeoEki    schedule 15.09.2015    source источник


Ответы (1)


Элементы, которые вы пропустили, отрисовываются на четвертой панели, которой не существует, поэтому не рисуются. Попробуйте удалить which = 4.

meuse.riv в вашем примере - это матрица, которая вызывает сообщение об ошибке, но должна быть объектом SpatialPoints, поэтому создайте sampling с помощью:

sampling = list("sp.points", SpatialPoints(meuse.riv), color = "black")

При работе с примерами я советую выбирать примеры как можно ближе к тому, что вам нужно, и менять только одну вещь за раз.

person Edzer Pebesma    schedule 15.09.2015
comment
Крестный отец spplot высказался! :-) Именно этого и не хватало - большое вам спасибо! - person GeoEki; 15.09.2015