我正在尝试在通过关卡绘制的当前图上放置一张世界地图。该图如下所示:
library(raster)
library(ncdf4)
library(maps)
library(maptools)
library(rasterVis)
library(ggplot2)
library(rgdal)
library(sp)
library(gridExtra)
MFplot4<-levelplot(MFMeaner3,margin=F, at=Fcutpoints4,cuts=11,
pretty=TRUE,par.settings=mapTheme, main="Historical five-day maximum
precipitation (mm/day) model mean")
对象“ MFMeaner3”具有以下属性:
class : RasterLayer
dimensions : 64, 128, 8192 (nrow, ncol, ncell)
resolution : 2.8125, 2.789327 (x, y)
extent : -181.4062, 178.5938, -89.25846, 89.25846 (xmin, xmax, ymin,
ymax)
coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0
data source : in memory
names : layer
values : 0.1583802, 164.2064 (min, max)
这是我尝试在上面的地块上放置世界地图的叠加层:
world.outlines<-map("world", plot=FALSE)
world.outlines.sp<-map2SpatialLines(world.outlines,proj4string =
CRS("+proj=longlat"))
MFplot4 + layer(sp.lines(world.outlines.sp,col="black",lwd=0.5))
但是,这会导致以下错误:
Error: Attempted to create layer with no stat.
我还尝试使用此方法放置一个简单的世界地图:
MFplot4 + plot(wrld_simpl)
但是我收到此错误:
Error in UseMethod("as.layer") :
no applicable method for 'as.layer' applied to an object of class "NULL"
为什么会出现这些错误?
在此方面的任何帮助将不胜感激!
答案 0 :(得分:1)
问题是,通过加载 ggplot2 ,您已经用latticeExtra::layer()
屏蔽了ggplot2::layer()
函数(由 rasterVis 附加)。如果必须加载 ggplot2 ,则需要完全限定对屏蔽函数的调用,并用latticeExtra::layer()
代替layer()
。
这是一个可重现的示例,当未加载 ggplot 时对我有用,但在加载以下示例时会失败:
library(rasterVis)
library(sp)
library(maps)
library(maptools)
## library(ggplot2) ## `levelplot() + layer()` fails when this is loaded
## Read in a RasterLayer
tmax <- getData('worldclim', var='tmax', res=10)[[6]]
## Create a SpatialLines object
countries <- map("world", plot=FALSE)
countries <- map2SpatialLines(countries, proj4string = CRS("+proj=longlat"))
## Overlay lines on levelplot
levelplot(tmax, margin=FALSE) +
layer(sp.lines(countries))