我正在关注优秀的例子here。一切都有效,直到网格绘图,
library("lattice")
spplot(sp_grd, "id", colorkey=FALSE,
panel = function(...) {
panel.gridplot(..., border="black", col.regions="white")
sp.polygons(shp)
sp.points(poi, cex=1.5)
panel.text(..., col="red")
})
当我尝试这个绘图时,我收到错误,
'使用数据包1时出错 正式论证" col.regions"由多个实际参数匹配'。
有任何修复方法吗?基本上我不希望用默认的颜色填充面板。
编辑:从链接修改的可重复示例。
### read shapefile
library("rgdal")
library("lattice")
library("rworldmap")
shp <- getMap(resolution="low")
### define coordinates and convert to SpatialPointsDataFrame
poi <- data.frame(x=c(15, 25, 35, 100),
y=c(-15, 25, -35, -50),
id="A", stringsAsFactors=F)
coordinates(poi) <- ~ x + y
proj4string(poi) <- proj4string(shp)
### define SpatialGrid object
bb <- bbox(shp)
cs <- c(10, 10)
cc <- bb[, 1] + (cs/2) # cell offset
cd <- ceiling(diff(t(bb))/cs) # number of cells per direction
grd <- GridTopology(cellcentre.offset=cc, cellsize=cs, cells.dim=cd)
sp_grd <- SpatialGridDataFrame(grd,
data=data.frame(id=1:prod(cd)),
proj4string=CRS(proj4string(shp)))
# does work
spplot(sp_grd, "id",
panel = function(...) {
panel.gridplot(..., border="black")
sp.polygons(shp)
sp.points(poi, cex=1.5)
panel.text(...)
})
# does not work
spplot(sp_grd, "id",
panel = function(...) {
panel.gridplot(..., border="black", col.regions="white")
sp.polygons(shp)
sp.points(poi, cex=1.5)
panel.text(...)
})
答案 0 :(得分:4)
您收到该错误消息,因为panel.gridplot()
正在传递两个名为col.regions
的不同参数。您已明确提供了一个,另一个是(默认情况下)通过面板函数的点(...
)参数传递。
解决方案是将col.regions
添加为面板函数的正式参数。这样,它将捕获来自外部的col.regions
参数(即来自spplot()
),将其从...
吸收的其他无法匹配的参数列表中删除。您对panel.gridplot()
的调用只会有一个名为col.regions=
的参数,并且会按预期运行。
这样可以解决问题:
spplot(sp_grd, "id", colorkey=FALSE,
panel = function(..., col.regions) {
panel.gridplot(..., border="black", col.regions="white")
sp.polygons(shp)
sp.points(poi, cex=1.5)
panel.text(...)
})