geom_point单独绘制德国Shapefile不显示,如何仅为其添加自定义点?
问题解决:德国Shapefile单独添加自定义点不显示的处理
核心原因:坐标系不匹配
你遇到的问题本质是德国Shapefile的坐标系与自定义点的经纬度坐标系不一致:
- sf自带的NC地图采用WGS84(EPSG:4326)坐标系,和你提供的
city经纬度(lat/lng)匹配,所以点能正常显示。 - 下载的德国VG2500 Shapefile默认采用ETRS89/UTM带32N(EPSG:25832)坐标系,而你定义的
city2是WGS84经纬度,直接用geom_point添加时,点的坐标不在当前地图的投影范围内,被自动裁剪,所以看不到。 - 同时绘制两个地图时,
coord_sf会自动将所有图层转换到同一个坐标系,此时自定义点被转换到匹配的坐标系,所以能显示。
解决步骤
1. 确认德国Shapefile的坐标系
先查看ger_shape的坐标系参数:
st_crs(ger_shape)
输出会显示对应的EPSG编码(通常是25832)。
2. 将自定义点转换为匹配坐标系的sf对象
把普通数据框格式的city2转为sf对象,并转换到和德国地图一致的坐标系:
# 将data.frame转为sf对象,指定原始坐标系为WGS84(EPSG:4326) city2_sf <- st_as_sf(city2, coords = c("lng", "lat"), crs = 4326) # 转换为德国Shapefile的坐标系 city2_sf <- st_transform(city2_sf, crs = st_crs(ger_shape))
3. 单独绘制德国地图与自定义点
用geom_sf绘制转换后的点即可:
ggplot() + geom_sf(data = ger_shape) + coord_sf(lims_method = "geometry_bbox") + geom_sf(data = city2_sf, color = 'red')
简化替代方案:强制地图使用WGS84坐标系
如果不想转换点的格式,也可以直接在coord_sf中指定地图采用WGS84坐标系,让地图图层自动适配:
ggplot() + geom_sf(data = ger_shape) + coord_sf(crs = 4326, lims_method = "geometry_bbox") + geom_point(data = city2, aes(x = lng, y = lat), color = 'red')
内容的提问来源于stack exchange,提问作者hierb
相关产品推荐
相关产品推荐

