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

ggplot2绘制空间地图时添加垂直边界线段问题排查

问题描述

需要在空间地图的边界上添加线段,运行下方代码后生成的线段为水平方向,不符合预期的垂直方向要求,无法定位错误来源。

library(ggplot2)
library(dplyr)
library(sp)
library(sf)
library(raster)

# 获取印度卡纳塔克邦地图数据
kn_sf <- 
  getData("GADM", country = "IND", level = 2) %>% 
  st_as_sf() %>% 
  filter(NAME_1 == "Karnataka")

# 待绘制线段的经纬度数据(预期绘制卡纳塔克邦西部外围的海岸线)
kncoast <- data.frame(orig_lat=12.7571, 
                      orig_lon=74.87461,
                      dest_lat=12.77404,
                      dest_lon=77.16021) 

# 绘图
kn_sf %>% 
  ggplot()+
  geom_sf()+
  geom_segment(data = kncoast, 
               aes(x = orig_lon,
                   y = orig_lat,
                   xend = dest_lon,
                   yend = dest_lat), 
               color="red", size=1) +  
  coord_sf()

代码运行效果如下:
运行效果示意图

错误原因

问题出在手动设置的线段终点坐标错误,和绘图函数无关:

  • 预期绘制的是卡纳塔克邦西部的南北向(垂直)海岸线,该区域经度稳定在74.8°E-75°E区间,应该通过纬度变化实现南北延伸
  • 当前设置的终点经度dest_lon=77.16021已经偏移到卡纳塔克邦东部区域,和起点经度差超过2°,但两点纬度差仅0.017°,经度变化幅度远大于纬度变化幅度,自然会画出东西走向的水平线段。
修正方案

调整线段的终点坐标,保持经度和起点基本一致(对应西部沿海位置),拉大纬度差值实现南北向的垂直效果,参考修正后的坐标配置:

# 修正后的线段坐标:经度匹配西部沿海位置,纬度南北延伸
kncoast <- data.frame(orig_lat=12.7571, 
                      orig_lon=74.87461,
                      dest_lat=14.77404,
                      dest_lon=74.86021)

如果需要绘制和实际岸线完全贴合的线段,不建议手动输入经纬度,直接从卡纳塔克邦的sf边界对象中提取西部临海的边界线要素绘制即可,能避免手动输坐标产生的点位偏移问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 14:18:12