我正在尝试使用 ggmap 在地图上绘制位置。因为我想使用分面,所以我必须将base_layer
参数提供给ggmap
. 我也试图将它包装在一个函数中。
我有定义地图边界框的变量:
long.range <- c(-71.5, -67.5)
lat.range <- c(42.5, 44.5)
还有一个 data.frame 定义了我要绘制的数据:
test.data <- data.frame("Name" = c("site1","site2","site3"),
"LAT" = c(43.25,43.4,44),
"LONG" = c(-71.25,-69.5,-68.5))
我有一个函数可以抓取地图并将data.frame应用为base_layer:
CreateBaseMap <- function(lat.range = c(NA,NA),
long.range = c(NA,NA),
data.in = NULL){
# download the map tile
base.map.in <- get_map(location = c(min(long.range),
min(lat.range),
max(long.range),
max(lat.range)),
source = "osm")
# create the map object
if (is.null(data.in)){
base.map <- ggmap(base.map.in)
} else {
base.map <- ggmap(base.map.in,
base_layer = ggplot(aes_string(x = "LONG",
y = "LAT"),
data = data.in))
}
base.map <- base.map +
labs(x = "Longitude",
y = "Latitude") +
coord_map()
print(base.map)
return(base.map)
}
然后我使用调用我的函数
base.map <- CreateBaseMap(lat.range = lat.range, long.range = long.range, data.in = test.data)
我得到这个错误。
Error in ggplot(aes_string(x = "LONG", y = "LAT"), data = data.in) :
object 'data.in' not found
到目前为止的故障排除
我知道我是否直接调用函数的胆量,如下所示:
base.map <- ggmap(get_map(location = c(min(long.range),
min(lat.range),
max(long.range),
max(lat.range)),
source = "osm"),
base_layer = ggplot(aes_string(x = "LONG",
y = "LAT"),
data = test.data)) +
geom_point()
print(base.map)
然后它工作正常。
我还使用print(data.in)
data.in 在调用 to 之前检查了它是否存在base_layer
,我可以看到它就在那里。
问题
看来调用base_layer
无法识别data.in
.
- 我怎样才能说服
base_layer
它真的想接受data.in
? - 这是 的问题
ggplot
,还是我做错了什么?