英国地图数据点无法正常绘制问题求助
问题解决:英国地图数据点无法显示的修复方案
问题分析
你的代码存在两个核心问题,导致数据点无法正常显示:
- 坐标系参数错误:如果你的CSV文件已经是转换好的经纬度(WGS84坐标系,EPSG:4326),
st_as_sf的crs参数应设为4326,而非英国国家格网的27700;如果CSV里是原始东/北坐标,则需用东、北坐标列作为coords参数,再设置crs=27700完成转换。 - 列名不匹配:
st_coordinates()返回的结果列名为X(对应经度)和Y(对应纬度),但你在ggplot的geom_point中引用了不存在的longitude和latitude列,导致无法定位数据点。
修正后的代码
情况1:CSV已转换为经纬度(WGS84)
library(tidyverse) library(sf) # 读取经纬度数据 a <- read.csv('eastnorthtest.csv') # 转换为sf对象(直接使用经纬度,坐标系设为4326) a_sf <- st_as_sf(a, coords = c("longitude", "latitude"), crs = 4326) # 读取英国行政区shapefile eng_reg_map <- st_read("LAD_DEC_2023_UK_BFC.shp") # 绘图:sf对象自动对齐坐标系,无需手动指定x/y eng_reg_map |> ggplot() + geom_sf(colour = "black", fill = 'white') + geom_sf(data = a_sf, size = 1, colour = 'red')
情况2:CSV为原始东/北坐标(英国国家格网,EPSG:27700)
library(tidyverse) library(sf) # 读取东/北坐标数据 a <- read.csv('eastnorthtest.csv') # 从东/北坐标转换为经纬度格式的sf对象 a_sf <- a %>% st_as_sf(coords = c("east", "north"), crs = 27700) %>% # 替换为你CSV里的东/北列名 st_transform(4326) # 转换为WGS84经纬度坐标系 # 读取英国行政区shapefile eng_reg_map <- st_read("LAD_DEC_2023_UK_BFC.shp") # 绘图 eng_reg_map |> ggplot() + geom_sf(colour = "black", fill = 'white') + geom_sf(data = a_sf, size = 1, colour = 'red')
关键说明
- 使用
geom_sf()替代geom_point()绘制数据点,sf对象会自动匹配坐标系,彻底避免列名不匹配的问题。 - 确认CSV中的列名是否对应:原始坐标用东、北列名,经纬度用
longitude/latitude列名。
内容的提问来源于stack exchange,提问作者Nick Curran
相关产品推荐
相关产品推荐

