У меня есть сетка, и я хочу создать карту из этой сетки с некоторыми элементами карты (масштаб, северная стрелка и т. Д.). У меня нет проблем с рисованием сетки и нужного цвета, но дополнительные элементы карты не будут отображаться на карте. Я попытался поставить first=TRUE
в аргумент sp.layout в соответствии с sp
manual, но все равно не удался.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)
И вот как это выглядит ... все обнаженные: Так что мои вопросы:
- Где масштаб бар, стрелка севера, и т.д. прячется? Я что-то пропустил? Каждый пример, который я мог найти в Интернете, похож на этот. На моем собственном наборе данных я вижу, как сначала нарисовывается шкала шкалы и стрелка на север, но как только сетка отображается, она накладывает дополнительные элементы карты (за исключением текста шкалы, который отображается на карте, а не на панели и по северной стрелке почему-то я, по-видимому, не понимаю).
- Сообщение об ошибке, появившееся на карте, просто показывает, когда я пытаюсь добавить места для выборки
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()) после того, как устройство открыто или изменено, чтобы это стало эффективным.
Однако также с этой дополнительной информацией я не смог решить эту проблему. Рад за любой намек!
Крестный отец spplot говорил! :-) Это именно то, чего не хватало - большое вам спасибо! – GeoEki