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

因经度符号差异导致ggplot地图无法对齐的技术问询

解决ggplot叠加地图错位及数据行被移除的问题

问题背景

使用R的ggplot绘制两幅埃德蒙顿地图时出现异常:

  • 从shp文件读取的区域地图:经度为带W标识的正数,通过sf包加载
  • 基于开放税收数据生成的stat_summary_2d热力图:经度为负数
    叠加时触发「所有数据行被移除」警告,两幅图完全错位。尝试过设置CRS为4269、取经度绝对值,均未解决问题。

核心原因

两个数据源的坐标参考系(CRS)不匹配:

  • shp文件大概率采用投影坐标系(比如埃德蒙顿常用的UTM Zone 10N,EPSG:32610),单位为米,因此经度显示为大正数
  • 开放税收数据采用地理坐标系(WGS84,EPSG:4326),单位为度,西经以负数表示

解决方案步骤

1. 确认shp文件的CRS

先查看加载后的shp数据的坐标系统:

library(sf)
# 查看yegmap的CRS信息
st_crs(yegmap)

记录返回的EPSG代码(例如埃德蒙顿区域常见值为32610)。

2. 将开放税收数据转换为匹配的CRS

把经纬度数据转换为sf对象,先指定原始CRS为WGS84,再转换到与shp一致的投影CRS:

library(dplyr)

# 将AssessmentData转换为sf对象,指定原始CRS为WGS84(EPSG:4326)
AssessmentData_sf <- st_as_sf(AssessmentData, 
                              coords = c("longitude", "latitude"),
                              crs = 4326)

# 转换为与yegmap一致的CRS(替换为你实际查到的EPSG代码)
AssessmentData_sf <- st_transform(AssessmentData_sf, crs = st_crs(yegmap))

# 提取转换后的坐标到普通数据框,适配stat_summary_2d
AssessmentData_transformed <- AssessmentData_sf %>%
  mutate(
    x = st_coordinates(.)[,1],
    y = st_coordinates(.)[,2]
  ) %>%
  st_drop_geometry() # 移除sf几何属性,变回普通数据框

3. 重新绘制并叠加地图

使用转换后的坐标数据绘制热力图,再叠加shp地图,避免手动设置坐标范围:

# 叠加地图的正确代码
final_plot <- ggplot() +
  # 绘制热力图,使用转换后的x、y坐标
  stat_summary_2d(data = AssessmentData_transformed,
                  mapping = aes(x = x, y = y, z = TaxGenerated),
                  bins = 500,
                  fun = function(z) sum(z)) +
  scale_fill_gradient(low = "brown", high = "yellow") + # 注意用scale_fill而非scale_colour,stat_summary_2d生成填充色块
  # 叠加shp区域地图,设置fill为NA避免覆盖热力图
  geom_sf(data = yegmap, fill = NA, color = "black") +
  labs(title = "埃德蒙顿税收热力图叠加区域边界")

print(final_plot)

关键注意点

  • 原代码中scale_colour_gradient为错误用法,stat_summary_2d生成的是填充色块,需改用scale_fill_gradient
  • 不要手动设置xlim/ylim,让ggplot自动匹配两个图层的坐标范围
  • 转换CRS时必须确保原始数据的CRS指定正确(开放经纬度数据几乎都采用WGS84,EPSG:4326)

内容的提问来源于stack exchange,提问作者Wild Turkey Sandwich

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:40:34