如何在RStudio中将城镇级坐标转为英国区域级地图绘制?
我来帮你搞定这个问题!要把城镇级的数据汇总到英国区域级别并绘图,咱们可以按下面的步骤来操作:
步骤1:准备城镇数据并关联到对应区域
首先得把你的城镇坐标(经纬度)匹配到英国的区域单元(比如NUTS1/NUTS2级别、英格兰郡、苏格兰议会区这类),这里用sf包的空间连接功能就能实现:
- 先把你的城镇数据转换成空间对象(sf格式):
library(sf) library(dplyr) # 假设你的数据框叫town_data,包含lon(经度)、lat(纬度)和需要聚合的变量(比如value) town_sf <- st_as_sf(town_data, coords = c("lon", "lat"), crs = 4326) # WGS84是通用的经纬度坐标系
- 获取英国区域边界数据,推荐用
rnaturalearth包快速获取官方级别的边界:
library(rnaturalearth) # 获取英国的州/区域级边界,返回sf格式 uk_regions <- ne_states(country = "united kingdom", returnclass = "sf") # 如果需要欧盟NUTS分级的区域(比如NUTS2),可以用nuts包: # library(nuts) # uk_nuts2 <- get_nuts(country = "GB", level = 2, resolution = 20, output_class = "sf")
- 执行空间连接,把每个城镇匹配到所属的区域:
# st_within确保城镇点落在区域多边形内 town_with_region <- st_join(town_sf, uk_regions, join = st_within)
步骤2:将城镇数据聚合到区域级别
接下来按照区域分组,对城镇数据做聚合(比如求和、均值,根据你的需求调整):
region_aggregated <- town_with_region %>% group_by(name) # 这里的name是边界数据里的区域名称字段,可根据实际字段名调整 summarise(total_value = sum(value, na.rm = TRUE)) %>% st_drop_geometry() # 先移除几何信息,后续再和边界合并
步骤3:合并数据并绘制区域地图
把聚合后的统计数据和区域边界合并,用ggplot2绘制 choropleth(填色)地图:
library(ggplot2) # 合并聚合数据与区域边界 region_map_data <- uk_regions %>% left_join(region_aggregated, by = "name") # 绘制地图 ggplot(region_map_data) + geom_sf(aes(fill = total_value)) + # 用聚合后的数值填充区域颜色 scale_fill_viridis_c(option = "plasma", na.value = "lightgrey") + # 配色方案,灰色填充无数据区域 labs(title = "英国区域级别数据地图", fill = "总数值") + theme_minimal() + theme(axis.text = element_blank(), axis.title = element_blank()) # 隐藏坐标轴,让地图更整洁
额外实用提示
- 如果你的城镇数据只有名称没有坐标,可以用
tidygeocoder包调用OpenStreetMap接口获取经纬度:
library(tidygeocoder) town_data <- town_data %>% geocode(address = town_name, method = "osm", lat = lat, long = lon)
- 想要更精准的英国官方边界(比如ONS发布的行政区边界),可以下载对应的Shapefile文件,然后用
st_read()读取:
uk_ons_regions <- st_read("你的Shapefile文件路径/xxx.shp")
内容的提问来源于stack exchange,提问作者digi.data
相关产品推荐
相关产品推荐

