【问题标题】:ggplot2 and maps: geom_point and annotation_raster position mismatchggplot2 和地图:geom_point 和 annotation_raster 位置不匹配
【发布时间】:2012-02-27 13:22:22
【问题描述】:

大家好,

使用下面的代码,我可以使用 ggmap 从 Google 成功检索栅格,使用 ggplot2 绘制 annotation_raster,并将站点位置绘制为栅格图层顶部的红点。在情节上,位置并不完全匹配(它们应该沿着海岸线)。我知道我的网站的位置是正确的,因为当我将数据作为 KML 文件上传到 Google 地球时,它们会标出它们应该在的位置。

我们将不胜感激。

此代码将按原样运行...请注意,您需要 ggplot2 的开发版本,该版本可在 github 上找到。安装:

# install.packages("devtools")
library(devtools)
install_github("ggplot2")

对于代码:

library(ggplot2)
library(ggmap)
library(grDevices)
theme_set(theme_bw())

# Some coordinates of points to plot:
siteLat = c(-22.94414, -22.67119, -29.25241, -30.31181, -32.80670, -33.01054, -32.75833, -        33.36068, -31.81708, -32.09185, -32.31667, -34.13667, -34.05016, -33.91847, -34.13525, -34.12811, -34.10399, -34.16342, -34.41459, -34.58786, -34.83353, -34.37150, -34.40278, -34.17091, -34.08565, -34.04896, -33.98066, -34.02448, -34.20667, -34.05889, -33.97362, -33.99125, -33.28611, -33.02407, -33.01798, -32.99316, -31.09704, -31.05000, -30.91622, -30.70735, -30.28722, -30.27389, -29.86476, -29.54501, -29.49660, -29.28056, -28.80467, -27.42472)
siteLon = c(14.50175, 14.52134, 16.86710, 17.26951, 17.88522, 17.95063, 18.02778, 18.15731, 18.23065, 18.30262, 18.32222, 18.32674, 18.34971, 18.38217, 18.43592, 18.45077, 18.48364, 18.85908, 19.25493, 19.33971, 20.00439, 21.43518, 21.73972, 22.12749, 23.05532, 23.37925, 23.64567, 23.89933, 24.77944, 25.58889, 25.64724, 25.67788, 27.48889, 27.91626, 27.92182, 27.95036, 30.18395, 30.21666, 30.32982, 30.48474, 30.76026, 30.83556, 31.04479, 31.21662, 31.24665, 31.44403, 32.07567, 32.73333)
siteName = c(seq(1:length(siteLon)))
sites <- as.data.frame(cbind(siteLat, siteLon, siteName))

# specify raster's approximate coordinates:
lats = c(-35, -20)
lons = c(10, 35)

SAMap <- GetMap.bbox(lons, lats, maptype = "satellite")

# extract "real" coords of raster:
lonr <- c(SAMap$BBOX$ll[2], SAMap$BBOX$ur[2])
latr <- c(SAMap$BBOX$ll[1], SAMap$BBOX$ur[1])

# extract raster fill data:
h_raster <- as.raster(SAMap$myTile)

# plot using annotation_raster:
g <- ggplot(sites, aes(siteLon, siteLat))
g + annotation_raster(h_raster, lonr[1], lonr[2], latr[1], latr[2]) +
  geom_point(aes(x = siteLon, y = siteLat), colour = "red", data = sites) +
  scale_x_continuous(limits = lonr) +
  scale_y_continuous(limits = latr)

(抱歉,我是新来的,所以无法发布图片)。

【问题讨论】:

  • 这不在我的机器上运行。我怀疑您还需要包含library(raster)。即使这样,也找不到annotation_raster。这是在哪个包(和版本)中?
  • 我认为您需要一个实验性的ggplot2 版本,有关安装此的信息,请参阅github.com/hadley/ggplot2
  • 我认为as.raster() 住在library(grDevices)annotation_rasterggplot2 版本 0.9.0 中。将更新顶部的代码。
  • 我找不到完整的答案,但这个提示可能会有所帮助。设置annotation_raster(h_raster, lonr[1], lonr[2] , latr[1] - 0.5, latr[2] - 0.5) 可以很好地对齐栅格和点。 google maps raster的边界框定义有问题。
  • 嗨,保罗。感谢您的提示 - 设置纬度偏移确实将底图与站点点对齐。这是一种使事情看起来像他们应该的方式的作弊,但我仍然不太明白为什么会出现问题。我发现这也有效,但并不完美:SAMap &lt;- GetMap.bbox(lons, lats, maptype="satellite", MINIMUMSIZE = TRUE) 将继续尝试并在这里报告。

标签: r google-maps map ggplot2


【解决方案1】:

好的,感谢 David Kahle,问题已得到解决。看这篇文章:

https://groups.google.com/forum/?hl=en&fromgroups#!topic/ggplot2/ABffHL3WTpY

AJ

【讨论】:

    猜你喜欢
    • 2017-11-29
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    • 2020-10-17
    相关资源
    最近更新 更多