为ggmap创建base_layer无法识别data.frame

2023-12-31

我正在尝试使用 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 在调用之前就存在base_layer,我可以看到它就在那里。

Question

看来调用的是base_layer不认识data.in.

  1. 我该如何说服base_layer它真的想接受data.in?
  2. 这是一个问题吗ggplot,还是我做错了什么?

解决方案似乎是使用%+% on the ggplot从创建的项目ggmap调用,而不是包含base_layer在原来的调用中ggmap。这绕过了 @baptiste 识别的代码问题。

要实现此解决方案,请复制以下代码来代替#create the map object在我原来的问题中:

# create the map object
  if (is.null(data.in)){
    base.map <- ggmap(base.map.in)
  } else {    
    base.map <- ggmap(base.map.in ) %+% data.in + aes(x = LONG,
                                                      y = LAT)
  }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为ggmap创建base_layer无法识别data.frame 的相关文章

随机推荐

  • 我可以隐藏我的 iPhone 应用程序或使其在 App Store 中无法搜索到吗?

    我希望我的应用程序无法从 App Store 中搜索到 我希望只有那些登录我的网站 然后在应用程序商店中单击我的 iPhone 应用程序链接的用户才能安装和使用我的应用程序 有什么办法可以做到这一点吗 要隐藏您的应用程序 您必须在 iTun
  • 围绕 MKMapView 上的点画圈

    我需要在 MKMapView 上围绕任意点 不一定是用户的位置 绘制一个具有指定半径的圆 我希望外观类似于地图应用程序使用的圆圈 以显示用户位置的准确性 是否有推荐的方法来执行此操作 或者我需要创建自定义叠加层 您可能想看看MKCircle
  • MsBuild-根据修改时间/名称从目录中删除文件

    我有一个目录中每次构建时生成的文件列表C BuildArtifacts 目录的内容如下所示 TestBuild 1 0 0 1 zip TestBuild 1 0 0 2 zip TestBuild 1 0 0 3 zip TestBuil
  • 使 SwiftUI 点击在剪切时不会超出范围

    点击注册超出剪切视图范围 看来 SwiftUI 会在另一个视图中以完整的宽度和高度布局图像 以为其提供宽高比填充的填充模式 这很好 但如果我想向视图添加点击操作 即使在剪切时 点击也会在视图边界之外注册 我可能做错了 或者可能还有其他方法
  • 在 Ember.js v2+ 中检测按键

    我在 ember v2 3 0 中检测按键时遇到问题 我是 ember 的初学者 我尝试编写显示按键的简单组件 但我在运行操作和获取参数时遇到问题 基本上我可以用this on keypress function 在 didRender 中
  • 带图标的 MenuItem 样式仅创建一个图标

    我在渲染使用视图模型作为 ItemsSource 的动态菜单的图标时遇到问题 我使用的解决方案概述如下与 ViewModel 绑定的 MVVM 动态菜单 UI https stackoverflow com questions 139216
  • boost::iostream zlib 将多个文件压缩到一个存档中

    我在将一堆文件打包到一个存档中时遇到问题 boost 文档在这个主题上非常有限 我已经在网上搜索了几个小时 但我找不到解决方案 到目前为止我所拥有的 boost filesystem ofstream ofsArchive some zip
  • 将 SQL 数据从一个表移动到另一个表

    我想知道是否可以将与某个查询匹配的所有数据行从一个表移动到另一个表 例如 我需要将所有表行从 Table1 移动到 Table2 其中用户名 X 和密码 X 以便它们不再出现在 Table1 中 我正在使用 SQL Server 2008
  • NodeJS 套接字 IO 停止随机发出?

    我正在运行 Node 0 6 16 并且所有模块至少根据 npm win7 x64 都是最新的 我注意到 即使没有发生断开连接 但由于某种原因 过了一会儿 我无法判断 也许1小时后 浏览器没有收到任何数据 它在 FF 上似乎比在 Chrom
  • ASP.NET vNext 可以使用非 vNext 引用吗?

    所以我在 VS 14 CTP 中有一个 ASP NET vNext 项目 我的目标是 NET Framework 4 5 1 我添加了对 NuGet 包的引用 该包没有特定于 vNext 的构建 Visual Studio 现在在编辑器 I
  • 视频无法在 iPad/iPhone 上播放

    我正在建立一个网站 daratogaincontrol com 在该网站上 我使用 videolightbox 来播放视频 这些视频无法在 iPad 或 iPhone 上播放 该网站在台式机 Mac 和 PC 上运行良好 videoligh
  • 存储 1 到 1000 素数的链表

    正如您将在以下程序的注释中看到的那样 我应该创建一个列表来存储从 1 到 1000 的所有素数并释放节点 其中只有两个功能是我的工作 然而 我很长时间都没有弄清楚为什么这个程序不能编译 你们看到错误了吗 这是已经交的作业 仅供我个人参考 i
  • 防止创建配置文件

    我正在尝试构建一个包 其中包含一些文件 etc那些不是配置 它们包含在conffiles即使我创建一个空的也自动package conffiles in the debian目录 我怎样才能停下来dh installdeb这样做 我不确定我
  • 在 Eclipse 中设置自定义语法突出显示的快速方法

    我知道我不是第一个需要这个的人 我正在开发一个内部创建的代码库 我想在 Eclipse 中对其应用突出显示 在 Notepad 中 我可以为我正在查看的文件设置语言 有什么办法可以为 Eclipse 做到这一点吗 我正在编写的代码将使用与
  • 如何在 Python 中编写一个函数将 csv 的每一行翻译成另一种语言?

    如何在 Python 中编写一个函数 将 csv 文件的每一行翻译为另一种语言 并使用 pandas 将翻译作为另一列添加到同一 csv 中 我的输入文件如下所示 我希望我的输出是这样的 我是这样开始的 from googletrans i
  • ActionController::UrlGenerationError,没有路由匹配

    我已经阅读了我能找到的所有类似问题 但仍然无法找出我的问题 routes rb Rails application routes draw do resources lists only index show create update d
  • 将装饰器列表应用于可调用对象?

    给定一系列装饰器方法 如何将它们应用于可调用对象 例如 因为 foo bar def baz pass 是相同的 def baz pass baz foo bar baz 人们会假设有一个装饰器列表 foo bar 它们可以应用于baz动态
  • ms-access:数据库引擎找不到输入表或查询

    这是查询 SELECT FROM SELECT Occurrence Number Occurrence Date 1 0 Preanalytical Before Testing Cup Type NULL as 2 0 Analytic
  • 找不到“id”=sign_out 的用户

    我正在 Rails 中使用设备 但现在无法注销我的用户 当我使用 users log out 页面时 出现以下错误 ActiveRecord RecordNotFound in UsersController show Couldn t f
  • 为ggmap创建base_layer无法识别data.frame

    我正在尝试使用 ggmap 在地图上绘制位置 因为我想使用分面 所以我必须提供base layer论证ggmap 我也试图将其包装在一个函数中 我有定义地图边界框的变量 long range lt c 71 5 67 5 lat range