spplot/lattice:对象不是 drawn/overdrawn
spplot/lattice: objects not drawn/overdrawn
我有一个网格,我想使用一些地图元素(比例尺、指北针等)从该网格生成地图。我可以毫无问题地绘制网格和我需要的颜色,但是附加的地图元素不会显示在地图上。我尝试根据 sp
manual 将 first=TRUE
放入 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
之后绘制项目(因此项目不会被网格透支
and/or 多边形)。对于网格,首先添加列表元素 = TRUE 可确保
在绘制网格之前绘制项目(例如,添加填充的多边形时)。合并图层时透明度可能会有所帮助;它可用于
PDF 设备和其他几种设备。
Function sp.theme returns 一个格子主题,可以用来作图
由 spplot 制作;打开设备后使用 trellis.par.set(sp.theme())
或更改以使其生效。
但是,即使有了这些附加信息,我也无法解决这个问题。很高兴得到任何提示!
您错过的元素正在第四面板中绘制,该面板不存在,因此未绘制。尝试删除 which = 4
.
meuse.riv
在您的示例中是一个矩阵,它会导致错误消息,但应该是一个 SpatialPoints
对象,因此通过以下方式创建 sampling
:
sampling = list("sp.points", SpatialPoints(meuse.riv), color = "black")
根据示例工作时,我的建议是选择尽可能接近您需要的示例,并且一次只更改一件事。
我有一个网格,我想使用一些地图元素(比例尺、指北针等)从该网格生成地图。我可以毫无问题地绘制网格和我需要的颜色,但是附加的地图元素不会显示在地图上。我尝试根据 sp
manual 将 first=TRUE
放入 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 之后绘制项目(因此项目不会被网格透支 and/or 多边形)。对于网格,首先添加列表元素 = TRUE 可确保 在绘制网格之前绘制项目(例如,添加填充的多边形时)。合并图层时透明度可能会有所帮助;它可用于 PDF 设备和其他几种设备。 Function sp.theme returns 一个格子主题,可以用来作图 由 spplot 制作;打开设备后使用 trellis.par.set(sp.theme()) 或更改以使其生效。
但是,即使有了这些附加信息,我也无法解决这个问题。很高兴得到任何提示!
您错过的元素正在第四面板中绘制,该面板不存在,因此未绘制。尝试删除 which = 4
.
meuse.riv
在您的示例中是一个矩阵,它会导致错误消息,但应该是一个 SpatialPoints
对象,因此通过以下方式创建 sampling
:
sampling = list("sp.points", SpatialPoints(meuse.riv), color = "black")
根据示例工作时,我的建议是选择尽可能接近您需要的示例,并且一次只更改一件事。