【问题标题】:Plotting lines over maps in R with ggplot2/ggmap使用 ggplot2/ggmap 在 R 中的地图上绘制线
【发布时间】:2018-03-24 23:22:46
【问题描述】:

我正在尝试在 R 中创建一个地图,该地图在 ggmap 的某个区域的 Google 地图图像上覆盖人工地理边界(由一组 (x, y) 点 w/lat 和 lon 值确定)。我正在使用的代码如下。

ggmap(mapgilbert) +
  geom_point(data = df, aes(x = lon, y = lat, fill = "red", alpha = 0.8), size = 1, shape = 21) +
  guides(fill=FALSE, alpha=FALSE, size=FALSE) +
  for (i in 1:3){
      geom_segment(data = coords, aes(x = lon[[i]], y = lat[[i]], xend = lon[[(i+1)]], yend = lat[[(i+1)]], alpha = 0.8))
  }

请注意,coords 是一个包含相关纬度和经度值的 data.frame,而 df 是一个类似的包含点值的 data.frame;它们的结构都正确。

只需一次迭代,上面的代码就可以正常工作;出现区域图,出现我要绘制的三个点,并且出现在其中两个点之间绘制的线。但是,当我尝试在 for 循环中迭代地执行此操作时,没有任何行打印。我在一篇类似的文章中读到,这是因为 R 的自动打印功能在循环中不起作用,所以我尝试将相关语句包装在 print() 函数中,但由于某种原因它只是返回“NULL”。我有一种感觉,我犯了一些明显的错误,但我不确定它是什么。提前谢谢!

【问题讨论】:

  • 在无法查看数据的情况下,您还不清楚您要做什么,但 for 循环在那里不起作用,部分原因是您需要添加 @987654322 @ 层在彼此之上,这不会发生在这里。 geom_path 做我认为你正在寻找的东西。

标签: r for-loop ggplot2 iteration ggmap


【解决方案1】:

由于没有可重现的数据,我创建了一个随机数据。请提供您下次的数据。这是所有 SO 用户在寻求帮助时必须做的事情。

您需要为 geom_segment 创建一个数据框。您根本不必遍历数据。 mydf 的每一行都是一行。您指定两个点作为经度和纬度,分别使用xyxendyend

library(ggmap)
library(ggplot2)

# Create a data frame for segments.
mydf <- data.frame(id = 1:3, 
                   lat_1 = c(37.78, 37.75, 37.73), 
                   lon_1 = c(-122.41, -122.40, -122.405), 
                   lat_2 = c(37.77, 37.75, 37.72), 
                   lon_2 = c(-122.43, -122.42, -122.415))

# Create randam data points.
set.seed(111)

mydf2 <- data.frame(lon = runif(n = 100, min = -122.49, max = -122.38),
                    lat = runif(n = 100, min = 37.69, max = 37.813))

# Get a map 
map <- get_map(location = c(left = -122.523, bottom = 37.69,
                            right = -122.35, top = 37.8),
               maptype = "roadmap", source = "google", color = "bw")

# Plot the points and draw the segments on the map. 
ggmap(map) + 
geom_point(data = mydf2, 
           aes(x = lon, y = lat), color = "red", alpha = 0.6, size = 2) + 
geom_segment(data = mydf, 
             aes(x = lon_1, y = lat_1, xend = lon_2, yend = lat_2), 
             color = "green", size = 2, alpha = 0.8, lineend = "round")
#> Warning: Removed 34 rows containing missing values (geom_point).

reprex package (v0.2.0) 于 2018 年 3 月 25 日创建。

【讨论】:

  • 感谢您的帮助!虽然我最终改用 geom_polygon() 函数,但您的建议非常有帮助。很抱歉没有提前提供任何数据;这是我在 StackOverflow 上的第一篇文章,我不确定要包含哪些内容。
猜你喜欢
  • 2015-01-06
  • 2021-03-19
  • 1970-01-01
  • 1970-01-01
  • 2021-11-03
  • 2017-06-19
  • 2022-08-13
  • 1970-01-01
  • 2013-04-08
相关资源
最近更新 更多