地图与面板图

时间:2015-12-16 19:51:59

标签: r plot gis lattice

我正在关注优秀的例子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(...)
       })

1 个答案:

答案 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(...)
})