我有一个网格,我想从这个网格中生成一个带有一些地图元素(比例、指北针等)的地图。我可以毫无问题地绘制网格和所需的颜色,但额外的地图元素不会显示在地图上。我尝试first=TRUE
根据sp
手册提出 sp.layout 参数,但仍然没有成功。
我使用集成的 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")
。如果没有此条目,则地图显示不会出错,但也没有其他地图元素。如何在地图上显示采样点(例如,在大小取决于该采样点的绝对值的圆圈中)?
到目前为止,这困扰了我很多很多小时,我找不到任何解决方案。在 Bivand 等人的教科书 (2013) “Applied Spatial Data Analysis with R”中,我可以阅读以下条目:
sp.layout 参数中的项目顺序很重要;原则上,对象是按照它们出现的顺序绘制的。默认情况下,当 spplot 的对象有点或线时,sp.layout 项目会在点之前绘制,以允许绘制网格和多边形作为背景。对于网格和多边形,sp.layout 项目随后被绘制(因此项目不会被网格和/或多边形过度绘制)。对于网格,首先添加列表元素 = TRUE 可确保在绘制网格之前绘制项目(例如,添加填充多边形时)。合并图层时,透明度可能会有所帮助;它适用于 PDF 设备和其他几种设备。函数 sp.theme 返回一个格子主题,可用于 spplot 绘制的绘图;在打开或更改设备后使用 trellis.par.set(sp.theme()) 以使其生效。
但是,同样有了这些附加信息,我也无法解决这个问题。很高兴任何提示!