R 使用ggmap为每个位置行生成地图

R 使用ggmap为每个位置行生成地图,r,ggplot2,ggmap,R,Ggplot2,Ggmap,我有一个数据帧: df <- read.csv(text = "name,lat,long Tom,42,-73 Sally,41,-72 Harry,41,-74") …拉地图并将其居中不起作用。我想先把地图放在人的位置的中心,然后把点放在中心位置,输出三张地图 谢谢。我们可以在数据框中循环,每行生成一张地图: library(ggmap) p <- vector("list", 3) for (i in seq_along(df)){ p[[i]] <- ggma

我有一个数据帧:

df <- read.csv(text = "name,lat,long
Tom,42,-73
Sally,41,-72
Harry,41,-74")
…拉地图并将其居中不起作用。我想先把地图放在人的位置的中心,然后把点放在中心位置,输出三张地图


谢谢。

我们可以在数据框中循环,每行生成一张地图:

library(ggmap)

p <- vector("list", 3)

for (i in seq_along(df)){
  p[[i]] <- ggmap(get_map(location = c(lon = df$lon[i], lat = df$lat[i]), 
                     zoom = 12, color = "bw", source = "google")) +
    geom_point(data=df[i,], aes(x=long, y=lat), color='red')
}

> p[[1]]

注:

  • 你有
    zoom=12。。。source=“osm”
    位于
    location=c(…)
    参数内。这些应该是
    get\u map()
    的参数
  • 出于某种原因,我在openstreetmap中遇到了一个错误(HTTP状态为“400错误请求”),因此我使用了默认的google地图

  • 对于这三张地图中的每一张,是否希望其他两个点位于同一张地图上?不,我希望每行数据生成一张地图,每张地图一个点,地图以该点为中心。我认为在下载osm时出现了问题。例如,@Z.Lin-您的代码对于示例数据非常有效,但我尝试使用4个位置,并将第一行更新为:p@nycrefugee循环穿过数据帧的每一行(
    seq_-ough(df)
    ),因此我首先检查第4个位置是如何添加到数据帧的。是否在第四行?@Z.Lin是的,我在上面的可复制数据中添加了另一行,并通过Rmd文档中的代码片段加载。我把向量改为4,但它从来没有通过3轮的循环。我试图保存df并重新加载,但没有效果。我会继续尝试-谢谢。@nycrefugee尝试显式设置
    I=4
    &在循环中运行代码,看看这对上面测试框架中的三个数据点起到了什么作用。但是,对于此解决方案,如果任意两点位于同一视野内,则它们会同时出现。下面@Z.Lin的解决方案不会出现这种情况。@nycrefugee你是对的。我已经编辑了我的答案,所以即使任何其他点在同一视野中,它也能工作。
    library(ggmap)
    
    p <- vector("list", 3)
    
    for (i in seq_along(df)){
      p[[i]] <- ggmap(get_map(location = c(lon = df$lon[i], lat = df$lat[i]), 
                         zoom = 12, color = "bw", source = "google")) +
        geom_point(data=df[i,], aes(x=long, y=lat), color='red')
    }
    
    > p[[1]]
    
    > p[[2]]
    
    > p[[3]]
    
    Map(function(x, y, z) {
      ggmap(get_map(location = c(lon = x, lat = y), 
                    zoom = 12, color = "bw", source = "google")) +
        geom_point(data = df[z,], aes(x = long, y = lat), color = "red")
    }, df$long, df$lat, seq_along(df))