2015-09-15 3 views
0

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

Я воспроизвел проблему с интегрированным набором данных 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) 

И вот как это выглядит ... все обнаженные: enter image description here Так что мои вопросы:

  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()) после того, как устройство открыто или изменено, чтобы это стало эффективным.

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

ответ

2

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

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

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

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

+0

Крестный отец spplot говорил! :-) Это именно то, чего не хватало - большое вам спасибо! – GeoEki

Смежные вопросы