为何用于生成地图的R代码无法运行完成?
解决R绘制地图长时间无响应的方案
先排查数据加载环节
- 单独运行
st_read代码,验证数据能否正常加载。加载完成后用dim(eng_reg_map)或head(eng_reg_map)查看数据规模:eng_reg_map <- st_read("data/Regions_(December_2017)_Boundaries/Regions_(December_2017)_Boundaries.shp") dim(eng_reg_map) - 如果加载环节就卡顿,按以下方向排查:
- 确认 shp 配套的
.dbf、.shx、.prj等文件是否都在同一文件夹,缺失附属文件会导致加载异常 - 开启
st_read的日志输出,定位卡壳原因:eng_reg_map <- st_read("data/Regions_(December_2017)_Boundaries/Regions_(December_2017)_Boundaries.shp", quiet = FALSE) - 若数据边界过于精细,用
st_simplify简化几何图形,降低计算量:eng_reg_map_simplified <- st_simplify(eng_reg_map, dTolerance = 100) # dTolerance单位为米,可按需调整
- 确认 shp 配套的
排查绘图环节
- 若数据加载正常,先通过基础绘图验证几何数据有效性:
如果基础绘图也卡顿,说明几何数据本身存在问题,优先执行数据简化操作plot(st_geometry(eng_reg_map)) - 简化ggplot代码,先绘制最基础的轮廓,再逐步添加参数:
eng_reg_map |> ggplot() + geom_sf() + theme_void() - 检查并修复无效几何图形:
invalid_rows <- which(!st_is_valid(eng_reg_map)) if(length(invalid_rows) > 0){ eng_reg_map <- st_make_valid(eng_reg_map) }
环境与依赖排查
- 更新sf和ggplot2到最新版本,避免旧版本兼容性问题:
update.packages(c("sf", "ggplot2")) - 查看系统内存占用,若内存被占满会导致程序假死,可关闭其他占用内存的程序,或换内存更大的设备处理
内容的提问来源于stack exchange,提问作者Andrew Smith
相关产品推荐
相关产品推荐

