如何快速将SpatVector对象转换为数据框以用于ggplot2绘图?
更快处理SpatVector用于ggplot2的方法
首先纠正一个小问题:你的包列表里tidy应该是tidyverse?不过不影响核心问题,下面是几种高效方案:
方案1:直接用tidyterra的geom_spatvector(推荐,无需转换数据框)
不需要把SpatVector转成数据框,直接在ggplot中调用tidyterra::geom_spatvector,这是专门为SpatVector优化的绘图函数,速度远快于先转数据框再用geom_polygon。
代码示例:
# 加载所需包 pkgs <- c("geodata", "raster", "ggplot2", "tidyterra") lapply(pkgs, require, character.only = TRUE) # 获取边界数据 boundary_GB <- geodata::gadm(country = "GB", path = tempdir(), resolution = 2, level = 1) # 直接绘图 ggplot() + geom_spatvector(data = boundary_GB, fill = NA, colour = "black")
方案2:用tidyterra的tidy()直接转换SpatVector
如果确实需要把SpatVector转成数据框用于后续处理,tidyterra::tidy()是专门针对terra对象优化的转换函数,比先转成Spatial再用broom::tidy快很多。
代码示例:
# 转换为数据框 boundary_GB_df <- tidyterra::tidy(boundary_GB) # 复用原绘图代码 ggplot(data = boundary_GB_df, mapping = aes(x = long, y = lat, group = group)) + geom_polygon(fill = NA, colour = "black")
原方法慢的原因
你之前的方法broom::tidy(methods::as(boundary_GB, "Spatial"))需要先把SpatVector转换为旧的Spatial类对象,这个转换过程会消耗额外时间;再加上broom的tidy函数对Spatial对象的处理效率不如tidyterra对SpatVector的原生支持,所以整体速度偏慢。
内容的提问来源于stack exchange,提问作者user4846627
相关产品推荐
相关产品推荐

