ggmap 改变地图大小
Posted
技术标签:
【中文标题】ggmap 改变地图大小【英文标题】:ggmap changing size of map 【发布时间】:2015-03-10 23:51:50 【问题描述】:我想创建一个不是完全正方形而是矩形的地图,并且是我指定的大小。
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 好像没有do non-square maps,但也许你可以得到一张更大的地图,crop the image 和use it as a background。我猜对齐坐标会很痛苦,maybe here。 【参考方案1】:Sandy Muspratt 的答案生成了一个矩形地图,但它被拉伸了。要获得未拉伸的地图,必须将比率调整为地图所在位置的纬线和经线间距之间的比率。那就是:
比率 = 1/cos(纬度)
如果纬度以度为单位,则变为:
比率 = 1/cos(pi*latitude/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))
必须注意,如果地图的面积足够小而无法考虑地球的曲率,那么这种方式坐标将继续在整个地图上工作(例如向地图添加点)——也就是说,假设经线在地图所示区域内平行。在跨越数百公里的地图中可能不准确,而在大陆比例尺的地图中则非常错误。
【讨论】:
【参考方案2】:如果您想保持边界框的原始限制而只是改变其形状,您可以调整纵横比。如果要更改边界框的范围,请像以前一样获取地图,但使用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)
【讨论】:
感谢代码桑迪,但我无法让它工作。 抱歉,错过了您的评论。您需要解释您期望地图的外观。我得到一张不是正方形的地图。以上是关于ggmap 改变地图大小的主要内容,如果未能解决你的问题,请参考以下文章
在ggmap中使用“register_google”注册谷歌地图API的问题
如何将 geom_sf 生成的地图放在 ggmap 生成的栅格之上