为ggmap添加xlim和ylim后地图图层消失的问题求助
问题解决:ggmap添加xlim/ylim后地图消失
问题原因
- 经纬度范围顺序错误:你设置的
lon_MCK <- c(-83.100, -83.108)是从东到西的顺序,而ggplot的x轴范围需要从小到大(更西的经度数值更小,应放在前面),顺序错误会导致范围不匹配。 - xlim/ylim的裁剪逻辑:
xlim()和ylim()会强制裁剪所有图层,包括ggmap的地图瓦片。如果设置的范围和get_map获取的原始地图范围不重叠,地图图层就会被完全裁掉。
解决方案
方案1:修正范围顺序并使用coord_map()适配地图投影
coord_map()是ggmap推荐的调整地图范围的函数,它会适配地图投影,不会直接裁剪瓦片,而是调整显示区域:
# 修正经度顺序:从小到大(西到东) lat_MCK <- c(42.342, 42.350) lon_MCK <- c(-83.108, -83.100) # 用coord_map替换xlim/ylim MCK_Map + coord_map(xlim = lon_MCK, ylim = lat_MCK)
方案2:直接获取指定范围的地图(更高效)
在调用get_map()时直接通过经纬度范围获取目标区域的地图,后续无需再做裁剪,避免范围不匹配问题:
# 直接用边界范围获取地图:left(西), bottom(南), right(东), top(北) Detroit_MI_Map_MCK <- get_map( location = c(left = -83.108, bottom = 42.342, right = -83.100, top = 42.350), source = "google", maptype = "satellite" ) # 后续绘图代码(注意aes中直接用列名,无需$引用) MCK_SITE_MAP <- ggmap(Detroit_MI_Map_MCK) MCK_Map <- MCK_SITE_MAP + geom_point( data = AUDIOMOTH_BirdStats_Local, alpha = 1.0, aes(x = longitude, y = latitude, color = Richness, size = Shannon) ) + geom_label_repel( data = AUDIOMOTH_BirdStats_Local, aes(x = longitude, y = latitude, label = AudioMoth), position = position_dodge(width = 1), size = 4 ) + scale_color_gradient(low = "red", high = "springgreen3") + scale_size(range = c(4,10))
额外优化建议
在aes()中不要用AUDIOMOTH_BirdStats_Local$longitude这种写法,因为已经通过data参数指定了数据集,直接写列名即可,代码更简洁且符合ggplot规范。
内容的提问来源于stack exchange,提问作者WormWarbler
相关产品推荐
相关产品推荐

