如何在ggplot(ggmaps)中从shapefile定位地图上的点

时间:2015-02-26 23:23:11

标签: r ggplot2 shapefile ggmap

我想使用gglocator()包中的ggmaps函数来识别地图上的坐标以定位子图。以下示例产生错误消息。

library(maptools)
library(ggmap)

## Get shapefiles for plotting
download.file("http://ec.europa.eu/eurostat/cache/GISCO/geodatafiles/NUTS_2010_60M_SH.zip",paste0(tempdir(),"/NUTS_2010_60M_SH.zip"))
unzip(paste0(tempdir(),"/NUTS_2010_60M_SH.zip"),exdir=tempdir())
eurMap <- readShapePoly(fn=paste0(tempdir(),"/NUTS_2010_60M_SH/data/NUTS_RG_60M_2010"))
eurMapDf <- fortify(eurMap, region='NUTS_ID')

## Create the figure
gg <– ggplot(data=eurMapDf) + geom_polygon(aes(x=long, y=lat,group=group)) 
gg

## use gglocator()
gglocator()

## >  Error in `[.data.frame`(data, , deparse(mapping$x)) : 
##    undefined columns selected

gglocator()可以正常使用以下示例,这使我怀疑问题与传递到绘图函数(shapefile)的数据有关。

## gglocator works fine with this example
qmap("National Capital Region", zoom = 11)
gglocator(2)

有没有办法用ggplot绘制shapefile并使用gglocator()来识别点?如果没有,我可以使用任何替代定位器功能吗? grid.locator()不起作用,因为它不以正确的单位输出坐标。任何提示都将不胜感激。

更新

在创建mapping时,似乎并不总是定义gg object广告位。我可以通过显式设置映射到gglocator()槽的变量来使data运行。例如。以下作品:

gg$mapping$x  <- substitute(long)
gg$mapping$y <- substitute(lat)
gg

## gglocator() works as expected
gglocator()

所以我想我的真正问题是如何确保在调用mapping时设置ggplot

更新2

在ggplot函数调用中提供映射时,一切正常,而不是geom_polygon()的参数。例如。

gg2 <- ggplot(data=eurMapDf,aes(x=long, y=lat,group=group)) +   geom_polygon() 
gg2

## works fine now
gglocator()

我不确定是否有理由需要在ggplot()调用中声明映射,或者这是否是错误。在网络上发现的许多例子都使用了我先使用的语法(或者换句话说,我首先使用的语法是从我在网络上找到的众多例子之一中复制粘贴的。)

0 个答案:

没有答案