技术求助:如何使用R绘制州地图
嘿,我来帮你搞定用R绘制县界地图的事儿!结合你提到的ggplot2,我整理了一套清晰的步骤,直接就能上手:
使用R+ggplot2绘制县界地图指南
首先,咱们得先准备好几个核心工具包:sf(专门处理空间数据的神器)、ggplot2(绘图主力)、readr(读取CSV更高效)。先安装并加载它们:
# 第一次运行需要安装包 install.packages(c("sf", "ggplot2", "readr")) # 加载包 library(sf) library(ggplot2) library(readr)
步骤1:读取你的CSV数据
先确认下你的CSV结构:得有县名称列(用来区分不同县的边界点)和经纬度列。比如大概是这样:
county_name, lon, lat
朝阳县, 116.3, 39.9
朝阳县, 116.4, 39.8
...
怀柔县, 117.1, 38.5
用read_csv读取你的数据:
# 替换成你自己的CSV文件路径 county_data <- read_csv("你的县界数据.csv")
步骤2:把散点转换成空间多边形
你的CSV里是每个县边界的零散经纬度点,得把同一个县的点组合成完整的多边形:
# 按县分组,把每组的经纬度点转成sf格式的多边形 county_polygons <- county_data %>% group_by(county_name) %>% summarize(geometry = st_sfc(st_polygon(list(cbind(lon, lat))))) %>% st_sf() # 转换成标准空间数据框
⚠️ 划重点:一定要确保每个县的经纬度点是按边界顺序排列的(顺时针或逆时针都可以),不然画出来的多边形会乱成一团!如果点的顺序不对,记得先在CSV里调整点的顺序。
步骤3:用ggplot2绘制地图
现在就可以直接用geom_sf绘制空间数据了,还能自定义样式:
ggplot() + # 绘制县界多边形,填充色按县区分,边界用白色突出 geom_sf(data = county_polygons, aes(fill = county_name), color = "white", linewidth = 0.5) + # 去掉默认的灰色背景,换成清爽的风格 theme_minimal() + # 自定义标题和图例名称 labs(title = "XX州各县边界地图", fill = "县名称") + # 把图例移到底部(可选) theme(legend.position = "bottom", plot.title = element_text(hjust = 0.5))
额外优化小技巧
- 如果想给地图加底图,可以安装
ggspatial包,用annotation_map_tile函数添加在线底图 - 要是你的经纬度用的不是WGS84(GPS常用坐标系),可以用
st_transform(county_polygons, crs = 4326)转换成标准坐标系 - 想突出某个县?可以单独给它设置颜色:
ggplot() + geom_sf(data = county_polygons, aes(fill = ifelse(county_name == "你要突出的县", "重点县", "其他县")), color = "white") + scale_fill_manual(values = c("重点县" = "#ff4d4d", "其他县" = "#cceeff")) + theme_minimal()
如果你的CSV结构特殊,或者遇到点顺序、坐标系的问题,随时补充细节我再帮你调整!
内容的提问来源于stack exchange,提问作者Royalty
相关产品推荐
相关产品推荐

