You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于terra库实现双栅格与矢量文件的配对箱线图绘制问题

解决Terra库中双栅格与矢量提取并绘制配对箱线图的问题

错误原因

你用stack()报错是因为这个函数属于raster包,无法直接处理Terra的SpatRaster对象。Terra库有自己的栅格合并方式,不需要依赖raster包。

修正方案(纯Terra实现)

步骤1:加载必要库并准备数据

移除raster包,仅保留Terra和ggplot2,用Terra自带的方法合并栅格:

# 加载库(无需raster包)
library(terra)
library(ggplot2)

# 加载示例矢量和栅格数据
v <- vect(system.file("ex/lux.shp", package="terra"))
r_current <- rast(system.file("ex/elev.tif", package="terra"))  # 当前气候栅格
r_future <- rast(system.file("ex/elev.tif", package="terra"))   # 未来气候栅格(示例用同一份数据,实际替换为你的文件)

# 合并两个SpatRaster并命名区分
r_combined <- c(r_current, r_future)
names(r_combined) <- c("current_climate", "future_climate")

步骤2:提取栅格值并关联矢量属性

Terra的extract()支持直接提取多波段/多栅格数据,返回结果会包含每个栅格的列:

# 提取双栅格值,关联矢量ID
e <- extract(r_combined, v)
# 关联矢量的NAME_2属性
e$NAME_2 <- v$NAME_2[e$ID]

步骤3:整理数据为长格式(适配配对箱线图)

ggplot绘制配对箱线图需要长格式数据,用tidyr::pivot_longer转换:

# 加载tidyr(如果没装先执行install.packages("tidyr"))
library(tidyr)

e_long <- pivot_longer(e, cols = c(current_climate, future_climate),
                       names_to = "climate_period", values_to = "value")

步骤4:绘制配对箱线图

按行政区分组,对比当前/未来气候的分布:

ggplot(e_long, aes(x = NAME_2, y = value, fill = climate_period)) +
  geom_boxplot(position = position_dodge(width = 0.8)) +
  theme_minimal() +
  labs(title = "当前vs未来气候指标配对箱线图",
       x = "行政区", y = "气候指标值", fill = "气候时期") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

关键说明

  • Terra中合并多个SpatRaster用c()或merge(),两者效果一致,c()更简洁
  • extract()处理多栅格时,会自动为每个栅格生成对应列,无需额外处理
  • 长格式数据是ggplot绘制分组/配对图表的标准格式,确保每个观测对应一行

内容的提问来源于stack exchange,提问作者Sibylle Stöckli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 05:25:59