如何在choroplethr生成的美国西部气候图上叠加经纬度occurrence points?
在choroplethr地图上叠加经纬度点的解决方案
我之前也遇到过类似的困扰——choroplethr基于ggplot2,所以叠加散点其实要顺着ggplot的图层逻辑来,你之前的NAM_prt = NAM_prt + g没效果,大概率是图层对象的定义有问题,或者坐标/数据格式没匹配上。下面给你一步步的解决方法:
1. 确认数据格式
首先你的occurrence点数据需要有数值型的lat(纬度)和lon(经度)列,而且要确保是WGS84坐标系(EPSG:4326)——这是choroplethr默认使用的坐标系,要是你的点数据是其他坐标系,得先转换(可以用sf包的st_transform())。
另外要检查经纬度范围:美国西部的经度大概在-125到-100之间,纬度在30到50之间,要是你的数值超出这个范围,点会跑到地图可视区域外,看起来就像没显示。
2. 正确的图层叠加方法
choroplethr生成的是ggplot对象,直接用+链式叠加geom_point()就行,不用单独赋值再拼接。举个具体的例子:
假设你的气候数据是climate_data,点数据框是occurrence_points(包含lat和lon列):
# 先绘制美国西部的县级气候地图 NAM_prt <- county_choropleth( data = climate_data, state_zoom = c("california", "oregon", "washington", "idaho", "nevada", "utah", "arizona", "montana"), num_colors = 7, title = "美国西部县级气候分布图" ) # 叠加occurrence点 NAM_prt + geom_point( data = occurrence_points, aes(x = lon, y = lat), # 注意:x对应经度,y对应纬度,别搞反! color = "#ff3333", # 自定义点的颜色,比如亮红色 size = 2.5, # 点的大小 alpha = 0.6 # 增加透明度,避免点重叠遮挡地图 )
如果是州级地图,把county_choropleth()换成state_choropleth()就行,叠加逻辑完全一样。
3. 排查之前的无效代码
你之前用NAM_prt = NAM_prt + g没效果,可能的原因有:
g这个图层对象没有正确指定data和aes映射(比如没写aes(x=lon, y=lat))- 点数据的经纬度搞反了(比如把lat放到x,lon放到y)
- 点数据是字符型,ggplot无法识别坐标位置
你可以先单独测试点的绘制:
ggplot(occurrence_points, aes(x = lon, y = lat)) + geom_point()
如果这个图里能看到点在美国西部范围内,再叠加到choroplethr地图上就没问题了。
内容的提问来源于stack exchange,提问作者Petra
相关产品推荐
相关产品推荐

