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