ggmap改变地图大小

9
我想创建一个地图,它不是完美的正方形,而是长方形,并且大小由我决定。
require(ggmap)
tenmile <- get_map(location = c(lon = -122.486328, lat = 48.862813),
    color = "color",
    source = "google",
    maptype = "roadmap",
    zoom = 12)
tenmile.map <- ggmap(tenmile, 
    extent = "device",
    ylab = "Latitude",
    xlab = "Longitude")+ggtitle("GEOMean for Data from Oct 2013-Nov 2014")
tenmile.map + geom_point(data=pp, aes(x=lon, y=lat, size=geomean), color="red", alpha=0.5) +      
geom_text(data=pp, aes(x=lon, y=lat, label = site), size=3, vjust = 1.25, hjust = -0.1)

我想发一些图片,展示我得到和想要的东西,但是由于声望值不够,无法发布图片。 =-(


看起来ggmap不支持非正方形地图,但也许你可以获取一个更大的地图,裁剪图像并将其用作背景。我猜对齐坐标可能会很痛苦,也许可以在这里找到帮助 - andybega
2个回答

4
桑迪·马斯普拉特(Sandy Muspratt)的答案生成了一个矩形地图,但是它会被拉伸。要获得一个未被拉伸的地图,必须将比例调整为该地图所在纬度和经线间距之间的比例。也就是说:
比例= 1 / cos(纬度)
如果以度数给出纬度,则为:
比例= 1 / cos(pi *纬度/ 180)
我在这里举一个巴塞罗那地图的例子(巴塞罗那是一个很好的例子,可以检查是否有拉伸,因为大多数街道都形成一个正方形网格,并且变形很容易被注意到)。
library(ggmap) library(mapproj) mapbcn <- get_map(location =
  'Barcelona, Catalonia', zoom = 13)

# square map (default) ggmap(mapbcn)

# map cropped by latitude 
ggmap(mapbcn) +                
  coord_fixed(ylim=c(41.36,41.41), 
              ratio=1/cos(pi*41.39/180))

# map cropped by longitude 
ggmap(mapbcn) +    
  coord_fixed(xlim=c(2.14, 2.18), 
              ratio=1/cos(pi*41.39/180))

需要注意的是,如果地图的范围足够小以至于不考虑地球的曲率 - 即假定经线在地图所显示的区域是平行的,那么这种坐标方式将适用于整个地图(例如向地图中添加点)。但如果地图跨越数百公里,甚至是一个大陆,则可能存在不准确的情况。


3

如果您希望保留边界框的原始限制,但只是改变其形状,则可以调整纵横比。如果您想更改边界框的限制,则可以像以前一样获取地图,但使用coord_fixed()(或coord_cartesian())设置其限制。或者您可以同时调整纵横比和边界框的限制。

tenmile <- get_map(location = c(lon = -122.486328, lat = 48.862813),
  color = "color",
  source = "google",
  maptype = "roadmap",
  zoom = 12)
tenmile.map <- ggmap(tenmile, 
  ylab = "Latitude",
  xlab = "Longitude")+ggtitle("GEOMean for Data from Oct 2013-Nov 2014") +
  coord_fixed(xlim = c(-122.55, -122.40), ratio = 2/1)

感谢你的代码,Sandy,但我无法让它正常工作。 - Danielle Love
抱歉,我错过了您的评论。您需要解释一下您希望地图看起来像什么样子。我得到的地图不是正方形的。 - Sandy Muspratt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接