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

使用geom_sf绘制的地图出现倾斜 如何调整使其与坐标轴对齐

该需求完全可以实现,你遇到的地图倾斜是选用的ESRI:102003投影的特性导致的:该CRS是面向北美大陆设计的正轴等面积割圆锥投影,默认的中央经线、标准纬线参数适配北美大范围区域,仅绘制波多黎各这类小范围区域时就会出现明显倾斜。

你可以根据需求选择以下两种解决方案:

  • 方案1:更换适配小区域的横轴墨卡托投影
    你研究的波多黎各区域适配UTM 20N投影(EPSG:32620),该投影为横轴墨卡托投影,局部区域使用时地图会自然和坐标轴对齐,仅需替换coord_sf的CRS参数即可,修改后代码示例如下:
ggplot(data = PR)+
  geom_sf(fill = "lightgray", 
          col = "black", 
          show.legend = F)+
  scale_fill_identity()+ 
  theme(panel.grid.major = element_line(color = "gray", 
                                        linetype = "dashed", 
                                        size = 0.5), 
        panel.background = element_rect(fill = "aliceblue"))+
  annotation_raster(img, 
                    # 注意:更换CRS后需要把原来的经纬度范围转换成对应投影的平面坐标再填入
                    ymin = 转换后的纬度最小值, 
                    ymax = 转换后的纬度最大值, 
                    xmin = 转换后的经度最小值, 
                    xmax = 转换后的经度最大值)+
  geom_star(data = eulophia_transformed_with_lat_lon, mapping = aes(X,Y), 
            col = "black", fill = "red", 
            shape = 1, size = 2.5)+
  coord_sf(crs = "EPSG:32620")

注意:如果你的eulophia_transformed_with_lat_lon中的X、Y是WGS84经纬度,建议先将其转为sf对象并指定CRS为4326,ggplot会自动完成投影转换,避免点位偏移。

  • 方案2:自定义阿尔伯斯投影参数,保留原投影类型
    如果你需要保留阿尔伯斯等面积投影的特性,可以自定义适配研究区域的投影参数,将中央经线、标准纬线设置为你研究区的对应经纬度即可,示例如下:
# 自定义适配波多黎各区域的阿尔伯斯投影,lon_0设为区域中心经度,lat_1、lat_2设为区域南北界
custom_crs <- "+proj=aea +lat_1=17.5 +lat_2=18.5 +lon_0=-67 +datum=WGS84 +units=m +no_defs"

ggplot(data = PR)+
  geom_sf(fill = "lightgray", 
          col = "black", 
          show.legend = F)+
  scale_fill_identity()+ 
  theme(panel.grid.major = element_line(color = "gray", 
                                        linetype = "dashed", 
                                        size = 0.5), 
        panel.background = element_rect(fill = "aliceblue"))+
  annotation_raster(img, 
                    ymin = 转换后的纬度最小值, 
                    ymax = 转换后的纬度最大值, 
                    xmin = 转换后的经度最小值, 
                    xmax = 转换后的经度最大值)+
  geom_star(data = eulophia_transformed_with_lat_lon, mapping = aes(X,Y), 
            col = "black", fill = "red", 
            shape = 1, size = 2.5)+
  coord_sf(crs = custom_crs, lims_method = "geometry_bbox")

添加lims_method = "geometry_bbox"参数可以强制坐标轴适配你的数据边界,消除多余留白导致的视觉倾斜。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:03:01