You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ggplot2地图为何错误识别输入的经纬度数据?

解决ggplot2地图添加点位变形的问题

出现这个问题的核心原因是:geom_sf图层使用的是地理坐标系,但geom_point/geom_text是基于笛卡尔坐标的图层,两者坐标系未统一,导致ggplot自动调整了地图范围和比例,进而出现点位偏移、地图变形的情况。

以下是两种可行的解决方法:

方法1:将点位数据转换为sf对象

把你的城市点位数据转换成sf格式,和底图ejru使用同一坐标系,让所有图层遵循统一的地理坐标规则:

library(sf)

# 定义城市数据
city_data <- data.frame(
  city_name = c("Beit Hanina"),
  lat = c(31.8400),
  lon = c(35.2200)
)

# 转换为sf对象,匹配底图的坐标系
city_sf <- st_as_sf(city_data, coords = c("lon", "lat"), crs = st_crs(ejru))

# 绘图
ggplot(data = ejru) + 
  geom_sf() +
  geom_sf(data = city_sf, colour = "red") +
  geom_sf_text(data = city_sf, aes(label = city_name), nudge_y = 0.05, color = "darkblue")

方法2:显式指定coord_sf坐标系

保留原数据框格式,在绘图时强制添加coord_sf(),确保ggplot始终使用地理坐标系渲染所有图层:

ggplot(data = ejru) + 
  geom_sf() +
  geom_point(data = city_data, mapping = aes(x = lon, y = lat), colour = "red") +
  geom_text(data = city_data, mapping = aes(x = lon, y = lat, label = city_name), nudge_y = 0.05, color = "darkblue") +
  coord_sf()  # 强制统一坐标系

注意事项

  • 调整nudge_y的数值:原代码中nudge_y = 0.5在经纬度坐标系下过大,会把文本推离地图范围,改成0.05左右更合理。
  • 提前确认底图ejru的坐标系:可以用st_crs(ejru)查看,确保点位数据的坐标系和它一致。

内容的提问来源于stack exchange,提问作者Hannah Early

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 10:36:19