绘制SpatVector时出现node stack overflow错误求助
解决SpatVector子集绘图时的"node stack overflow"错误
这个错误通常是因为空间数据存在无效拓扑结构(比如自相交多边形、重复节点等),ggplot2/tidyterra解析这些几何对象时会陷入递归循环,最终触发栈溢出。结合你的代码,可通过以下步骤修复:
解决方案步骤
- 修复空间数据的拓扑问题
- 简化子集筛选逻辑
- 验证数据后重新绘图
修改后的完整代码
library(tidyverse) library(geodata) library(terra) library(tidyterra) library(ggplot2) # 获取数据并立即修复拓扑结构 IT2 <- gadm(country = "ITA", level=2, path = tempdir()) %>% terra::makeValid() # 查看目标大区名称 unique(IT2[["NAME_1"]]) # 用%in%简化多条件筛选,同时保留指定字段 target_regions <- c("Liguria", "Piemonte", "Valle d'Aosta") NW <- subset(IT2, NAME_1 %in% target_regions, select = c("NAME_1", "NAME_2")) # 先用terra自带plot测试数据是否正常(快速验证) plot(NW, col = NA, border = "black") # 再用ggplot2绘图 ggplot() + geom_spatvector(data = NW, fill = NA, col = "black") + theme_void()
额外排查方案
如果上述方法仍无效,可尝试:
- 转换为sf对象再绘图:
NW_sf <- sf::st_as_sf(NW) ggplot() + geom_sf(data = NW_sf, fill = NA, color = "black") + theme_void()
- 强制垃圾回收释放内存:
gc()
内容的提问来源于stack exchange,提问作者Simona
相关产品推荐
相关产品推荐

